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 子视图不会改变方向的主要内容,如果未能解决你的问题,请参考以下文章

iOS View 在方向改变时不会改变方向

一个 UIView 中有多个子视图(幻灯片?)?为我指明正确的方向

用动画调整 UIView 的大小,子视图不会动画

具有拐角半径和阴影视图的 UIView 不会在拐角处剪辑子视图

在运行时和方向更改期间居中和 sizeToFit 子视图

使用自动调整子视图大小为 UIView 帧大小更改动画