首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

自定义UIViewController子视图不旋转,但superview确实,帮我解决原因?

问题描述:

自定义UIViewController子视图不旋转,但superview确实,帮我解决原因?

解答:

出现这种情况的原因可能是在UIViewController的生命周期方法中没有正确处理旋转事件。当父视图(superview)旋转时,子视图(subview)默认会跟随旋转,但是可以通过以下方法来禁止子视图旋转:

  1. 在UIViewController中重写shouldAutorotate方法,并返回false,表示不允许自动旋转:
代码语言:swift
复制
override func shouldAutorotate() -> Bool {
    return false
}
  1. 如果只想禁止某个特定的子视图旋转,可以在该子视图所在的UIViewContoller中重写supportedInterfaceOrientations方法,并返回指定的旋转方向:
代码语言:swift
复制
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .portrait // 只支持竖屏
}
  1. 如果希望在某个特定的UIViewController中禁止旋转,可以在该UIViewController中重写supportedInterfaceOrientations方法,并返回指定的旋转方向:
代码语言:swift
复制
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .portrait // 只支持竖屏
}

以上方法可以根据具体需求选择使用,通过禁止自动旋转或指定特定的旋转方向,可以解决子视图不旋转的问题。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何把设计图自动转换为iOS代码? 在线等,挺急的!

作为一个 iOS开发爱好者,这是我很感兴趣的一个话题.最近也确实有了些许灵感,也确实取得了一点小成果,和大家分享一下.欢迎感兴趣的iOS爱好者能和我一起研究讨论!...尽管作为一名iOS开发人员,我依然对苹果公司提供的开发技术及其发展方向持谨慎和保守态度.前一段时间,尝试使用 Xib来布局视图,遇到一些坑,但是熟悉之后,也确实比原来单纯基于绝对位置的纯代码布局更灵活些...< 真正的内容视图. @property (weak, nonatomic, readonly) UIViewController * viewController; //!...< 视图对应的属性,模块中应有属性与其对应,且可通过此属性访问对应的视图. extern const NSString * YFViewComponentSubViewHolderWidthKey...< 同一设计图中,视图的底部边距值(bottom). @interface YFViewComponent : UIView /** * 视图配置信息.

1.4K60
  • IOS开发系列——UIView专题之五:常用开发技巧篇

    :返回nil; •若返回YES,则向当前视图的所有视图(subviews)发送hitTest:withEvent:消息,所有视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历...,直到有视图返回非空对象或者全部视图遍历完毕; •若第一次有视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; •如所有视图都返回非,则hitTest:withEvent...如果一个视图的区域超过父视图的bound区域(父视图的clipsToBounds属性为NO,这样超过父视图bound区域的视图内容也会显示),那么正常情况下对子视图在父视图之外区域的触摸操作不会被识别...1、hitTest Hacking the responder chain 在此例子中button,scrollview同为topView的视图scrollview覆盖在button之上,这样在在...•- (UIViewController*)viewController { •for(UIView* next = [self superview]; next; next = next.superview

    1.1K20

    IOS基础知识第二季

    UIViewController视图控制器的基类 12.每个应用至少一个窗口,UIWindow继承UIView 自动创建(xcode4.5之后) 13.UIScreen对象可以充当IOS设备物理屏幕的替代者...addSubview添加视图 insertSubview:atIndex:视图插入到指定索引位置 insertSubview:aboveSubview:视图插入指定视图之上 insertSubview...//设置tag属性 UIView *_view = [self.window viewWithTag:2];或者tag为2的视图 其他属性:视图会继承父视图属性 alpha透明度0.0~1 backgroundColor...背景颜色 subviews视图集合 hidden是否隐藏 superview视图 multipleTouchEnabled是否开启多点触摸 userInteractionEnabled是否响应触摸事件...viewWithTag:110]; _view.transform = CGAffineTransformTranslate(_view.transform, 20, 20);//平移 视图旋转

    96460

    iOS动画-CALayer基础知识

    视图的的职责就是创建并管理这个图层,以确保视图在层级关系中添加或者被移除的时候,它们的关联图层也同样对应在层级关系树当中有相同的操作。...contentsRect (CGRect) 允许在图层边框里显示寄宿图的一个域 contentCenter (CGRect) 定义一个固定的边框和一个在图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图...,并结合定时器调用-setNeedsDisplay方法,就可以实现环形动画的效果(这里就不做具体演示了); 四、CALyer方法绘制自定义寄宿图 虽然-drawRect:方法是实现了自定义寄宿图绘制,事实上还是底层的...之后也可能被释放,造成野指针崩溃;所以,对于这个问题的解决方案是:创建继承于NSObject的类,用于实现CALayerDelegate并管理CALayer的绘制逻辑; 使用总结:当我们需要自定义寄宿图时...,可能会需要设置此属性来决定图层是围绕哪一个点旋转的;这时候我们又不得不考虑一个问题:修改锚点可以让我们的动画围绕非中心点旋转,但是这也改变了原有视图的位置frame,这是我们不想要的结果,该如何解决

    1.9K50

    iOS 无侵入埋点组件总结

    2.3.1 唯一标识(viewPath)的获取: 整个 APP 的视图结构可以看成是一颗树(viewTree),树的根节点就是 UIWindow,树的枝干由 UIViewController 及 UIView...这样确实能够唯一的表示此 view 了,但是有一个缺点:它的可读性很差。因此在此基础上又增加了每个节点的名称,节点的名称由当前节点的 view 的类名来表示。同时在开头都添加了一个页面名称作为标识。...2.4 埋点上报 自定义埋点上报数据类型,上报到 elastic,后台进行数据分析 3. 实现部分 3.1 SDK 架构 ?...obtainSameSuperViewSameClassViewTreeIndexPat { NSString *classStr = NSStringFromClass([self class]); //cell的view...和 UIViewController 生命周期埋点不同的是,一个类中可能有许多不同的 UIButton 子类,相同的 UIButton 子类在不同的视图中的埋点也要区分出来,所以我们通过 NSStringFromClass

    2.9K31

    iOS 中的事件响应

    其中查找的过程如下 UIApplication ——> UIWindow ——> 视图 ——> ... ——> 视图 可以注意下,其实 UIViewController 并没有参与查找的过程,如果想验证...从后往前遍历视图重复执行 指的是按照 FILO 的原则,将其所有视图按照「后添加的先遍历」的规则进行命中测试。...通过上边的描述我们可以得出原因,对于系统UIControl(除去开发者自定义的)来说,为了防止 UIControl 默认的手势与其父 View 上的 UIGestureRecognizer 的冲突,系统会默认设定...:inContentView:方法询问是否将事件传递给对应的视图 (如果返回 NO, 则该事件不会传递给对应的视图,如果返回 YES,则该事件会传递给对应的视图,默认为 YES); 当事件被传递给视图后...canCancelContentTouches = YES) open func touchesShouldCancel(in view: UIView) -> Bool 相关问题 通过阅读本文,我想你对下面的问题出现的原因解决办法应该有了比较深刻的认识

    2.7K11

    【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

    我在一年前,项目中随手写过一个简单的工具类,当时的确解决了大问题。视图和控制器相关的内存泄露,几乎都不存在了。后来想着一直就那个工具,写一篇文章,不过一直没有写。...这句代码,是整个机制的灵魂所在,也是比其他类似的内存泄露分析库更简洁的重要原因之一。我当时也是搜遍的整个网络,才知道自己要的究竟是什么。...直到现在,我依然以为,没有调用过这两个方法的视图或控制器对象,本身没有多大的拦截价值。当然,这依然因项目而异。作为一个工具类,只要它能解决大多数场景下的问题,我觉得就可以了。...) NSMutableDictionary * loadedViewControllers; /* 已加载,尚未正确释放,有内存风险的视图对象....view.superview) { /* 进一步过滤掉有父视图视图,即只输出一组视图的根节点,这样便于更进一步定位问题. */ NSLog(@"有内存泄露风险的视图: %@", obj

    1.3K60

    UI篇-UIResponder之事件传递和响应精析

    2.UIView的nextResponder属性,如果有管理此view的UIViewController对象,则为此UIViewController对象;否则nextResponder即为其superview...UIViewController的nextResponder属性为其管理view的superview....3.类似地,视图层次中的每个后续视图如果处理事件都首先传递给它的视图控制器(如果有的话),然后是它的父视图。 4.最上层的容器视图将事件传递给UIWindow对象。...//******************* 华丽的分割线 **************** 系统先调用pointInSide: WithEvent:判断当前视图以及这些视图视图是否能接收这次点击事件...,然后在调用hitTest: withEvent:依次获取处理这个事件的所有视图对象,在获取所有的可处理事件对象后,开始调用这些对象的touches回调方法 在自定义View中重写 touchesBegan

    2.5K30

    View编程指南(三)

    如果在下一个事件循环周期之前retain view,view将被released。 将subview添加到另一个View时,UIKit会通知superview和subview。...tag是减少硬编码依赖性并支持更加动态和灵活的解决方案的有用方法。你可以使用它的tag来定位它而不是存储一个指向view的指针。tag也是引用view的更持久的方式。...当您更改view的大小时,通常需要更改嵌入的view的位置和大小,以考虑其父级的新大小。 superview的autoresizesSubviews属性决定子view是否调整大小。...自定义图层接收事件或参与响应者链,根据核心动画规则绘制自己的图形并响应其父view或图层中的大小更改 - (void)viewDidLoad { [super viewDidLoad];...尽管您很少需要重写这些方法,您可以这样做,以实现view的自定义触摸行为。例如,您可以重写这些方法来防止view处理触摸事件。

    1.7K30

    iOS图片浏览器(功能强大性能优越)

    为底是为了更好的控制旋转屏幕时的UI适配,之前也是考虑更轻一点的 UIView,但是它会受父视图旋转影响,可能适配难度会翻几倍,而且使用 UIViewController 能更方便和优雅的实现图片浏览器的入场和出场动画...确实,这种算法逻辑咋一看好像能解决问题,当你滑到下图的情况下时,会发生奇怪的现象: blog_pic3.png 你会发现在滑动到 第n页 和 第n+1页 之间的临界点时,界面会突然向左或者向右跳动一段距离...于是组件中笔者的做法是,在每次重写布局时,都移动一个距离:当前偏移量 / 最大偏移量 * 总共页间距 其实做法很简单,这种思维方式却非常实用,在我们做很多需要平滑过渡的逻辑时(局限于界面),都可以以这种思维做出...七、屏幕旋转UI适配 找到组件必然支持的方向 组件支持了旋转功能,由于采用的是 UIViewController 作为底类,理所当然的是让组件内部控件跟随 UIViewController旋转旋转...引入代理规范布局流程 由于通知视图更新布局、存储当前视图分别在“竖屏”和“横屏”下的frame、存储当前适配的屏幕方向等信息是每一个视图几乎都会做的工作(虽然细节有些差异,但我们稍宏观的看这个问题)。

    2.3K70

    iOS屏幕旋转及其基本适配方法

    如果我们要具体控制单个界面UIViewController旋转就必须先看一下根视图控制器的配置情况了。...如果存在上层根视图控制器,而我们只在这个视图控制器中实现方法,会发现这个方法是走的,因为这个方法被上层根视图控制器拦截了。理解这个原理后,我们有两种方法实现自动可控的旋转设置。...方法1:逐级设置各视图控制器,高优先级的视图控制器影响低优先级控制器, 解决上述的问题我们需要设置UITabbarViewController如下: //是否自动旋转 -(BOOL)shouldAutorotate...//返回导航控制器的顶层视图控制器的自动旋转属性,因为导航控制器是以栈的原因叠加VC的 //topViewController是其最顶层的视图控制器, -(BOOL)shouldAutorotate{...这里有两个解决方法: 方法1:在自定义导航控制器中增加以下方法 #pragma mark -UINavigationControllerDelegate //不要忘记设置delegate - (void

    9.3K60

    深入剖析Auto Layout,分析iOS各版本新增特性

    这里要注意重写layoutSubviews()或者执行类似layoutIfNeeded这样可能会立刻唤起layoutSubviews()的方法,如果要这样做需要注意手动处理的这个地方自己的视图布局的树状关系是否合理...Auto Layout引擎来表达该规则,VFL也例外。...页面第一次显示是会自动标记上需要刷新这个标记的,所以第一次看显示都是看不出问题的,页面再次调用layoutIfNeeded时是不会立刻执行layoutSubview的(之前加上setNeedsLayout...案例二 将多个有相互约束关系视图removeFromSuperView后更新布局在低配机器上出现崩的问题。这个原因主要是根据不含视图项的约束不合法这个原则来的,同时会抛出野指针的错误。...,当视图traitCollection改变时UIViewController时可以捕获到这个消息进行处理的。

    1.2K10

    View编程指南

    在view层次结构中,父view负责定位和调整其view的大小,并且可以动态地执行。这种动态修改view的功能使您的view能够适应不断变化的条件,如界面旋转和动画。...影响view的其他更改包括隐藏superview,更改superview的透明度,或将数学变换应用于superview的坐标系。 View层次结构中的排列也决定了应用程序如何响应事件。...但是,如果view处理特定的触摸事件,它可以将事件对象传递给其superview。如果superview处理事件,它将事件对象传递给它的superview,等等这样一个响应者链。...由于每个view都是绘制其内容,并将其view相对于其bounds进行布局,所以在绘制和布局过程中可以忽略其superview的变换。 图展示了两种不同的旋转因素在渲染时如何组合。...相对于绘制的view,shape仍然只旋转了45度,view旋转使其看起来被旋转了更多。

    2.3K20

    iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,makeKeyAndVisible,keyWindow,windowLevel,UIWind

    例如,很多人习惯在keyWindow上添加一个自定义浮层视图,但是,当自己或者其它第三方框架曾经调高过其它自定义UIWindow属性windowLevel,或者有其它同级windowLevel的UIWindow...#pragma mark - 获取根视图的(导航、标签)视图控制器 + (UINavigationController *)getRootVCformViewController { UIViewController...在自定义的UIWindow添加自定义视图 假设想为一个APP添加一个手势验证的页面,当进入APP弹出这个手势验证页面。...指定自定义视图控制器 UIViewController *vc = [[UIViewController alloc]init]; _window.rootViewController = vc; 3....销毁自定义UIWindow 自定义视图用完后,记得要销毁自定义的UIWindow,否则导致APP以后会有越来越多没用到的UIWindow,即使再也没有显示过它们,但是可以用调试工具看到许多废弃的window

    7.9K10

    iOS自动布局——Masonry详解

    平面直角坐标系确实是一套完备在理论,这在数学上已经验证过了,只要我们的屏幕还是平面,它就肯定是有效的。但有效不一定高效,我们在日常的生活中,很少会用平面直角坐标系来向人描述位置关系。...手动布局的方式是,一次性计算出这四个值,然后设置进去,完成布局。当父控件或屏幕发生变化时,控件的计算就要重新来过,非常麻烦。...效果图 我们注意到,自动布局其实工作分两步: 创建视图的约束 将约束添加到合适的位置 约束关系从上面的描述中,已经非常清晰了。那么如何寻找约束添加的合适位置呢? ?...TARGET_OS_TV #import #define MAS_VIEW UIView #define MAS_VIEW_CONTROLLER UIViewController...我们似乎在调用时,并不需要关心这件事情,那说明框架帮我们完成了这个工作。

    1K20
    领券