UIView 子视图不会改变方向
Posted
技术标签:
【中文标题】UIView 子视图不会改变方向【英文标题】:UIView subview doesn't change orientation 【发布时间】:2010-09-15 04:37:01 【问题描述】:我有一个管理视图的视图控制器。
我将我的视图控制器子类添加为窗口的子视图,以换出另一个视图。
我在 iPad 上运行横向模式。
视图显然不知道它处于横向模式。它的框架很混乱。
我可以/应该做些什么来告诉它它是横向的,和/或方向已经改变。这通常是如何发生的。为什么没有发生?
我曾经将我的视图控制器放在一个 UITabBarController 中,它在那里工作得很好。
【问题讨论】:
【参考方案1】:覆盖:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
// Return YES for supported orientations
return YES;
【讨论】:
【参考方案2】:您的 ViewController 没有收到旋转事件,因为您尚未呈现 viewController 但已在视图层次结构中添加了 viewController 的视图。
您的标签栏控制器以前负责将旋转事件转发给它管理的视图控制器,这就是它过去的工作方式。
虽然我建议将视图换出窗口是一个坏主意。相反,您应该有一个主视图控制器,它接受旋转事件,然后根据当前方向交换此视图控制器中的视图。在进一步编码之前考虑重新设计。
【讨论】:
您是否建议拥有我自己的根视图控制器和交换子视图?其中一个视图是 UISplitView,它似乎不喜欢这样。但也许我再一次说得不够多,也没有转发足够多的事件。是否有切换视图的最佳方式的示例? 如果您使用的是 splitViewController,恐怕拆分视图控制器应该始终是主视图控制器。旋转事件不需要显式传递。这些消息是并且应该在内部发送。旋转后交换视图不顺眼。旋转发生时 UI 会突然切换。发生旋转时,应通过设置适当的自动调整大小掩码来调整视图大小。但是,如果您有这样的要求,您可以继续我的建议 + 前提是您不会将拆分视图作为子视图,因为它不会获得旋转事件。【参考方案3】:我的问题是我的故事板覆盖了我现有的自定义编码应用程序委托。在我删除故事板文件和自定义生成的视图控制器代码后,它对我有用。
【讨论】:
以上是关于UIView 子视图不会改变方向的主要内容,如果未能解决你的问题,请参考以下文章
一个 UIView 中有多个子视图(幻灯片?)?为我指明正确的方向