在 viewDidLoad 中触发旋转

Posted

技术标签:

【中文标题】在 viewDidLoad 中触发旋转【英文标题】:Trigger rotation in viewDidLoad 【发布时间】:2012-09-19 03:11:26 【问题描述】:

我遇到了一些布局问题,当我以纵向模式启动我的应用程序然后将其转换为横向模式时,之后打开的视图返回错误的旋转值。

例如,我在从纵向模式旋转后以横向模式打开一个视图,当我记录旋转时它仍然返回纵向模式:

NSLog(@"%u", [[UIDevice currentDevice] orientation]); // 4
NSLog(@"%f / %f", self.view.frame.size.width, self.view.frame.size.height); // 748.000000 / 1024.000000

当我将 iPad 旋转到纵向模式并返回到横向模式时,它会返回正确的尺寸

NSLog(@"%u", [[UIDevice currentDevice] orientation]); // 1
NSLog(@"%f / %f", self.view.frame.size.width, self.view.frame.size.height); // 1024.000000 / 704.000000

我需要做些什么来使新添加的视图适应旋转吗?

【问题讨论】:

现在我通过在主视图中跟踪设备宽度和高度来解决它,这可能不是最好的解决方案,但它确实有效。 【参考方案1】:

在 viewWillAppear 方法中设置视图的新框架。这会将所有项目设置为正确的大小,如果您使用导航控制器,这将在推送和弹出视图时起作用。

【讨论】:

【参考方案2】:

这是因为您的视图首次以纵向模式显示。所以你必须在 viewDidLoad 中手动检查和旋转视图。

if (UIInterfaceOrientationIsLandscape(orientation)) 


    [self.view setFrame:VIEW_LANDSCAPE_FRAME];

    //do more stuff


【讨论】:

orientation 来自哪里?如果我使用[[UIDevice currentDevice] orientation]],它在横向模式下添加时仍然返回错误的值。【参考方案3】:

试试this link。它对我有用。最好在willAppear 中的链接中进行操作,而不是在viewDidLoad 中进行操作。还要确保您已在 shouldAutorotateToInterfaceOrientation 方法中返回所需的方向,并在 info.plist 中设置右键 UIInterfaceOrientation

【讨论】:

以上是关于在 viewDidLoad 中触发旋转的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我的 RootViewController:viewDidLoad 方法之后突然调用我的应用程序委托的 didFinishLaunchingWithOptions 方法?

当屏幕在同一个视图控制器中旋转时替换 UIViews

强制 viewDidLoad 在 iOS 上触发

如何从 viewcontroller viewdidload 方法触发视图中的功能 - 目标 c - iphone

视图控制器何时触发其前身 viewDidLoad?

ViewDidLoad() 不触发后台刷新