【问题标题】:UIView subview doesn't change orientationUIView 子视图不会改变方向
【发布时间】:2010-09-15 04:37:01
【问题描述】:

我有一个管理视图的视图控制器。

我将我的视图控制器子类添加为窗口的子视图,以换出另一个视图。

我在 iPad 上运行横向模式。

视图显然不知道它处于横向模式。它的框架很混乱。

我可以/应该做些什么来告诉它它是横向的,和/或方向已经改变。这通常是如何发生的。为什么没有发生?

我曾经将我的视图控制器放在一个 UITabBarController 中,它在那里工作得很好。

【问题讨论】:

    标签: iphone ipad uiviewcontroller landscape


    【解决方案1】:

    覆盖:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations
        return YES;
    }
    

    【讨论】:

      【解决方案2】:

      您的 ViewController 没有收到旋转事件,因为您尚未呈现 viewController 但已在视图层次结构中添加了 viewController 的视图。

      您的标签栏控制器以前负责将旋转事件转发给它管理的视图控制器,这就是它过去的工作方式。

      虽然我建议将视图换出窗口是一个坏主意。相反,您应该有一个主视图控制器,它接受旋转事件,然后根据当前方向交换此视图控制器中的视图。在进一步编码之前考虑重新设计。

      【讨论】:

      • 您是否建议拥有我自己的根视图控制器和交换子视图?其中一个视图是 UISplitView,它似乎不喜欢这样。但也许我再一次说得不够多,也没有转发足够多的事件。是否有切换视图的最佳方式的示例?
      • 如果您使用的是 splitViewController,恐怕拆分视图控制器应该始终是主视图控制器。旋转事件不需要显式传递。这些消息是并且应该在内部发送。旋转后交换视图不顺眼。旋转发生时 UI 会突然切换。发生旋转时,应通过设置适当的自动调整大小掩码来调整视图大小。但是,如果您有这样的要求,您可以继续我的建议 + 前提是您不会将拆分视图作为子视图,因为它不会获得旋转事件。
      【解决方案3】:

      我的问题是我的故事板覆盖了我现有的自定义编码应用程序委托。在我删除故事板文件和自定义生成的视图控制器代码后,它对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多