iOS8上的iPhone界面方向
Posted
技术标签:
【中文标题】iOS8上的iPhone界面方向【英文标题】:iPhone Interface Orientation on iOS8 【发布时间】:2014-07-23 09:51:18 【问题描述】:我已经尝试这样做了 2 周,只是发现它不起作用的原因:
已弃用的 API
以下 API 已弃用:
界面方向的 UIViewController 方法和属性。如Unified Storyboards for Universal Apps 中所述,特征和大小类替换它们。
From what's new in ios 8
我需要的是:FirstViewController
,即rootViewController
到我的navigationController
。 FristViewController
应该仅在纵向模式下可用(永远不会在横向模式下显示)。
然后导航堆栈中有一些中间 ViewControllers(支持两个方向),直到我到达 LastViewController
,它应该仅在 LandscapeRight 模式下可用(永远不会在肖像或其他模式)。
我一直在尝试使用以下 CustomNavigationController
,但显然 iOS8 中的情况发生了变化,我无法让它工作:
- (BOOL)shouldAutorotate // Available in iOS 6.0 and later
return YES; // // May use topViewController's, but in this app it always returns YES
- (NSUInteger)supportedInterfaceOrientations // Available in iOS 6.0 and later
if (self.topViewController != nil)
return [self.topViewController supportedInterfaceOrientations];
else
return [super supportedInterfaceOrientations];
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation // Available in iOS 6.0 and later
if (self.topViewController != nil)
return [self.topViewController preferredInterfaceOrientationForPresentation];
else
return [super preferredInterfaceOrientationForPresentation];
谢谢!
【问题讨论】:
我将标题从设备方向更改为界面方向 - 设备方向包括您不关心的“面朝上”和“面朝下”等内容 感谢您的编辑/评论! :) 【参考方案1】:您遇到的问题与 iOS 8 无关。请注意以下几点:
您误解了有关已弃用内容的说明。只有名称为 willRotate
的方法才会被弃用,而且无论如何您都不会使用它们。
supportedInterfaceOrientations
的工作方式没有任何改变。不过,请务必使用 beta 4 进行测试,因为 beta 1-3 中有一个错误会阻止呈现的视图控制器方向正常工作。
“然后导航堆栈中有一些中间 ViewControllers(支持两个方向),直到我到达 LastViewController,它应该只在 LandscapeRight 中可用”......这是不可能的,但不是因为iOS 8。您所描述的内容自 iOS 6 以来一直是非法的!您不能为导航堆栈中的不同视图控制器设置不同的强制方向。 只有呈现的视图控制器可以强制旋转(正如我在此处和许多其他答案中解释的那样:https://***.com/a/21616025/341994)。
【讨论】:
【参考方案2】:在导航堆栈中的每个视图控制器中适当地实现- (NSUInteger)supportedInterfaceOrientations
。 UINavigationController 支持的方向无关紧要。它应该尊重其显示的视图控制器支持的方向。
还要确保在目标的“常规 -> 部署信息”配置部分中检查了所有必要的方向。
【讨论】:
以上是关于iOS8上的iPhone界面方向的主要内容,如果未能解决你的问题,请参考以下文章