iOS 8 中呈现的视图控制器中的界面方向不正确

Posted

技术标签:

【中文标题】iOS 8 中呈现的视图控制器中的界面方向不正确【英文标题】:interface orientation not correct in presented view controllers in iOS 8 【发布时间】:2014-09-12 19:37:39 【问题描述】:

ios 7 和更早版本中,我可以像这样在 viewDidLayoutSubviews 中进行 UI 更改:

- (void)viewDidLayoutSubviews 

    [super viewDidLayoutSubviews];

    if ( UIInterfaceOrientationIsLandscape(self.interfaceOrientation) ) 

        //update views for landscape

    

    else 

        //update views for portrait

    


我仍然可以在 iOS 8 except 在其他视图控制器提供的视图控制器中执行此操作。当视图控制器由另一个视图控制器呈现时,这不起作用,因为self.interfaceOrientation 属性在呈现的视图控制器中不正确。它不反映当前方向,而是设备旋转之前的方向。

如果在 iPad 上呈现视图控制器并将 modalPresentationStyle 设置为 UIModalPresentationPageSheet,则不会出现此问题。换句话说,只有在呈现全屏视图控制器时才会出现问题。

有什么建议吗?

【问题讨论】:

【参考方案1】:

尝试改用这个:

[[UIApplication sharedApplication] statusBarOrientation]

此外,如果您放弃对 iOS 7 的支持而只支持 8,我建议您放弃界面方向处理以支持 trait 集合和大小类,如果可以的话。

【讨论】:

这很棒。像这样的 iOS 8 有这么多小问题真是太烦人了。 是的,但我认为随着我们将来尝试编写更多与设备无关的应用程序,它们会有所改进。 iOS 8 中的很多东西都是关于修复第一次做的奇怪或错误的东西。

以上是关于iOS 8 中呈现的视图控制器中的界面方向不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 8 中强制视图控制器方向?

当界面方向颠倒时呈现视图控制器

iOS 6 中的模态视图控制器强制横向方向

呈现视图控制器中的方向更改未更新父视图控制器

transitionContext 中的视图控制器不正确

UIViewController 在 iOS 6 中能否支持比其父级更多的界面方向?