“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
提醒 - UIInterfaceOrientation
和 UIDeviceOrientation
不一样!它们也可能在不同的时间更新,具体取决于您初始化它们的方式。
您也可以在类似问题上查看this answer。
【讨论】:
以上是关于“self.interfaceOrientation”未在 iOS 5 中更新的主要内容,如果未能解决你的问题,请参考以下文章