“self.interfaceOrientation”未在 iOS 5 中更新

Posted

技术标签:

【中文标题】“self.interfaceOrientation”未在 iOS 5 中更新【英文标题】:"self.interfaceOrientation" not getting updated in iOS 5 【发布时间】:2011-11-04 14:35:36 【问题描述】:

我最近将我的 iPad 更新到 ios5 并发现了一个相当奇怪的问题。我的应用程序中的两个方向都有 2 种不同的布局。我正在通过参考self.interfaceOrientation 更新didRotateFromInterfaceOrientation 方法中的视图。但是现在self.interfaceOrientation 没有更新,并且视图显示得很奇怪。任何人都可以对这个问题有所了解。 iOS 5有什么新东西给我带来了麻烦吗???

【问题讨论】:

【参考方案1】:

我不知道 iOS 5 有什么变化,但这是我从 iOS 4 开始就使用的代码,并且从那以后一直运行良好。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
    switch (toInterfaceOrientation)

       case UIInterfaceOrientationPortrait:
       case UIInterfaceOrientationPortraitUpsideDown:

       //change layout to Portrait 

       return YES;

       case UIInterfaceOrientationLandscapeLeft:
       case UIInterfaceOrientationLandscapeRight:

       //change layout to Landscape 

        return YES;

        default:
            return NO;
    

【讨论】:

这根本不能回答问题 我提供了一种在方向改变时实现他的布局的替代方法。这种替代方法解决了问题中描述的错误。 啊,我明白了;您建议将布局更改插入您的 cmets 所在的位置。我误会了。不过,这仍然是个坏主意。 -shouldAutorotateToInterfaceOrientation: 可以在没有即将轮换的情况下调用;如果你将控制器放在导航控制器中,它会快速连续调用此方法 4 次并缓存返回值。 我认为他可能不小心使用了UIInterfaceOrientationMask,这不会起作用 - see Apple Developer Documentation【参考方案2】:

你可以使用

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

并将方向设置为变量,但这不是一个好的解决方案。

【讨论】:

【参考方案3】:

我认为这里的问题是您实际获取设备方向的方式。根据我的经验,self.interfaceOrientation 并不总是可靠的。

有几种方法可以获取当前的UIInterfaceOrientation,但据我了解,从状态栏获取方向是唯一相对有效的方法,因此请尝试改用它:

[UIApplication sharedApplication].statusBarOrientation

提醒 - UIInterfaceOrientationUIDeviceOrientation 不一样!它们也可能在不同的时间更新,具体取决于您初始化它们的方式。

您也可以在类似问题上查看this answer。

【讨论】:

以上是关于“self.interfaceOrientation”未在 iOS 5 中更新的主要内容,如果未能解决你的问题,请参考以下文章