Joh*_*lph 18 iphone landscape orientation uiviewcontroller
这里有很多混淆和一组相应的问题,以及如何实现适当处理横向/纵向模式自动旋转的iPhone应用程序.当期望以横向模式开始时,实现这种应用尤其困难.最常见的观察效果是扰乱的布局和屏幕上不再识别触摸的区域.
对标记的问题进行简单搜索iphone并landscape揭示在某些情况下发生的这些问题:
仅横向显示具有多个笔尖的iPhone应用程序:应用程序以横向模式启动,第一个笔尖的视图呈现正常,从不同笔尖加载的所有视图都无法正确显示.
Iphone横向模式在加载新控制器时切换到Portraite模式:自解释
iPhone:仅在横向上,在第一个addSubview之后,UITableViewController无法正常旋转:与上面相同的问题.
iPhone仅限横向实用程序 - 模板应用程序:布局错误,控制器似乎无法识别视图应该旋转但在横向模式下显示剪切的纵向视图,导致屏幕的一半保持空白.
在纵向viewController之后的landscape中的presentModalViewController:模式视图也未正确呈现.
已经提出了一组不同的解决方案,其中一些包括通过CoreGraphics完全自定义动画,而其他解决方案则建立在从主笔尖加载的第一个视图控制器始终显示正确的观察的基础上.
我花了大量时间研究这个问题,最后找到了一个解决方案,它不仅是一个部分解决方案,而且应该在所有这些情况下都能正常工作.我打算在这篇CW帖子中为其他在横向模式下遇到UIViewControllers问题的人提供常见问题解答.
请提供反馈,并通过纳入任何相关的观察结果来帮助提高本职位的质量.如果您知道,可以随意编辑和发布其他/更好的答案.
Joh*_*lph 13
在视图控制器中,覆盖shouldAutorotateToInterfaceOrientation:声明支持的接口方向.每次设备方向改变时,控制器基础设施都将检查此属性.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return (orientation == UIInterfaceOrientationLandscapeRight);
}
Run Code Online (Sandbox Code Playgroud)
这是视图控制器需要做的绝对最小值.如果要以横向模式启动应用程序,则需要将以下密钥添加到.plist文件中:
<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>
Run Code Online (Sandbox Code Playgroud)
Apple建议在Landscape Right模式下启动仅横向应用程序(请参阅"用户体验指南">"立即启动"下的HIG).
每当您尝试加载不同于主笔尖加载的视图控制器时,您的视图控制器既不会询问它支持的接口方向,也不会正确设置其框架.只有绑定到窗口的第一个视图控制器才能正确布局.
其他人建议使用连接到主窗口的"MasterViewController",其他控制器将其视图添加为子视图,而不是直接挂钩到窗口.虽然我发现这个解决方案是一个可行的选择,但在模态视图控制器添加到这些所述子视图的情况下,它无法正常工作.如果您有一些应该能够自动旋转的子视图(主控制器将阻止的内容),也会出现问题.
使用未记录的API来强制某种界面方向也不是一种选择.
到目前为止,我发现的最佳解决方案是修改"MasterViewController"变通方法.使用UINavigationController隐藏的导航栏和隐藏的标签栏,而不是使用自定义的"MasterViewController" .如果从该控制器的导航堆栈中推送/弹出所有其他视图,则将正确管理该堆栈上的控制器的自动旋转.
通过导航堆栈presentModalViewController:animated:上的任何视图控制器呈现的模态控制器UINavigationController将以正确的布局旋转和渲染.如果希望模态视图控制器可以旋转到与父视图控制器不同的方向,则需要在显示模态视图时从父控制器的shouldAutorotateToInterfaceOrientation方法返回所需的方向.为了在取消模态控制器时正确恢复界面方向,您需要确保在调用之前返回父控制器所需的方向.您可以在视图控制器上使用私有来管理它(例如).shouldAutorotateToInterfaceOrientationdismissModalViewController:animated:BOOLBOOL isModalMailControllerActive_
我很快就会添加一段示例代码,现在已经很晚了.如果有任何未解决的问题仍然存在或者对此帖有什么不清楚,请告诉我.随意编辑和改进.
我对ios应用程序有一个有趣的要求:
main viewController应该只是landscape,但是所有其他的(可以从main推出)可以是landscape和portrait.
问题出现 - 当我推送到一个新的viewController,然后旋转到肖像 - 并且弹回 - 主视图不再是横向.此外 - 开放应用程序,它不是在横向.
为了保持主视图控制器的风景,无论从哪个方向弹出/推动,我都做了以下事情:(在viewWillAppear :)
//set statusbar to the desired rotation position
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO];
//present/dismiss viewcontroller in order to activate rotating.
UIViewController *mVC = [[[UIViewController alloc] init] autorelease];
[self presentModalViewController:mVC animated:NO];
[self dismissModalViewControllerAnimated:NO];
Run Code Online (Sandbox Code Playgroud)
希望它会帮助某人!
在sdk 3.2.5 ios 5.0.1上进行了PST.
PS感谢此FAQ中的所有信息!
| 归档时间: |
|
| 查看次数: |
18498 次 |
| 最近记录: |