在 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 方法?