【问题标题】:adding subview changes orientation [duplicate]添加子视图更改方向[重复]
【发布时间】:2012-09-02 19:37:21
【问题描述】:

可能重复:
Orientation in a UIView added to a UIWindow

当我使用[[[UIApplication sharedApplication] keyWindow] addSubview:myView.view] 将我的加载视图添加为子视图(以便它位于所有视图的顶部)时,即使我的应用程序被锁定为横向,视图的方向也会以纵向显示。当我直接添加为添加子视图时,不会发生这种情况。

知道为什么我哪里出错了吗?

【问题讨论】:

  • 这是一个奇怪的构造,添加了一个视图作为keyWindow的子视图,并且绑定不接收通知事件。为什么不添加作为视图控制器视图的子视图(在这种情况下,视图控制器将获得所有适当的旋转通知事件)。您可以解决您的构造问题,但为什么要这样做呢?

标签: iphone ios uiview


【解决方案1】:

在没有代码的情况下也猜测,但另一个理论是拥有视图的 ViewController 响应 - (BOOL)shouldAutorotateToInterfaceOrientation: 仅针对纵向的真值(我认为 xcode 提供的模板 vc 代码中的大部分默认情况下都会这样做)。

从提供的少量代码来看,也许我们正在谈论的 ViewController 称为 myView(如果我没看错的话,“myView”对于 ViewController 的实例来说是一个糟糕的名称选择)。检查 ViewController 的 shouldAutorotate 实现...确保它在未来方向为横向时回答 YES。

【讨论】:

    【解决方案2】:

    没有代码很难说,但这可能是因为当您直接将子视图添加到窗口时,它不是根视图控制器视图的子视图,并且确实会收到方向通知。我要么避免将其直接添加到窗口的子视图中,要么如果必须,注册方向通知,如下所示:

    [[NSNotificationCenter defaultCenter] addObserver:myView
                                             selector:@selector(orientationChanged:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                                object:nil];  
    

    然后将适当的方法添加到您的myView 视图控制器来处理它。

    【讨论】:

    • 我的应用程序被固定为横向模式,那有什么关系呢?即使设备没有旋转也会出现这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多