IOS iOS5,iOS6,iOS7中UITabBarController,UINavigationController等界面中的旋转问题总结
2015-06-24 16:56
330 查看
链接:http://www.2cto.com/kf/201401/273570.html
今天需要在程序中的一个界面中实现横屏和竖屏切换,而其他界面保持竖屏,实现的过程中遇到了若干问题,总结了一下,在这里分享给大家。
遇到的问题如下:
1.如何在其中一个UIViewController中实现横竖屏切换,其他UIViewController仍然只支持竖屏。
2.无论如何设置参数,所有界面都不支持横竖屏切换。
3.界面中的横竖屏切换正常,但是启动页面始终是横屏。
在解决以上问题之前,先说明一下设置设备旋转的方式。
1.iOS5、iOS6、iOS7都可以在程序的info.plist中增加Supported interface orientations字段,在该字段的值中增加所需要的方向。
2.iOS6和iOS7可以在AppDelegate中增加以下代码,设置程序支持的方向:
?
以上两个方式是针对整个应用的,下面介绍的方法针对单个界面。
3.iOS5以前,可以通过在UIViewController或其子类(UITabBarController、UINavigationController等)中重写以下方法:
?
4.在iOS6之后,可以通过在UIViewController或其子类(UITabBarController、UINavigationController等)中重写以下方法:
?
所以通过将以上全局和单个页面的方法结合,我们就可以实现只在某个页面中实现横竖屏切换。那下面我们就来说说如何解决一开始提出的三个问题:
1.当程序中存在UITabBarController时,可以通过category或者继承UITabBarController,覆盖以下方法:
?
当程序中存在UINavigationController时,可以通过category或者继承UINavigationController,覆盖以下方法:
?
最后,就可以在需要横竖屏切换的页面中实现以下方法:
?
在不需要横竖屏切换的页面中实现以下方法:
?
如果觉得页面过多的话,可以给所有页面加一个基类,把不需要横竖屏切换的代码加到里面,再在需要横竖屏切换的页面中覆盖基类的方法即可。
2.第二个问题解决方法让我郁闷的时间最长,但是解决的时间也是最快的,原因是我的手机平时都默认竖屏锁定,解开就好了。。。
3.第三个问题在Info.plist中增加字段和AppDelegate中增加代码两种方式的区别。这两种方式的实现效果是一样的,都可以增加全局支持的方向。需要注意的是,AppDelegate中增加的代码仅在iOS6之后的系统生效,如果要支持iOS5以下的系统,还是需要在Info.plist中增加字段。如果两种方式都实现时,所增加的方向以AppDelegate中增加的代码为准;而启动屏幕的方向,以在Info.plist中字段顺序为准。
举个例子,如果在Info.plist中增加字段的顺序为Landscape(right), Landscape(left), Portrait,则启动的时候为横屏;如果在Info.plist中增加字段的顺序为Portrait, Landscape(right), Landscape(left),则启动的时候为竖屏。
今天需要在程序中的一个界面中实现横屏和竖屏切换,而其他界面保持竖屏,实现的过程中遇到了若干问题,总结了一下,在这里分享给大家。
遇到的问题如下:
1.如何在其中一个UIViewController中实现横竖屏切换,其他UIViewController仍然只支持竖屏。
2.无论如何设置参数,所有界面都不支持横竖屏切换。
3.界面中的横竖屏切换正常,但是启动页面始终是横屏。
在解决以上问题之前,先说明一下设置设备旋转的方式。
1.iOS5、iOS6、iOS7都可以在程序的info.plist中增加Supported interface orientations字段,在该字段的值中增加所需要的方向。
2.iOS6和iOS7可以在AppDelegate中增加以下代码,设置程序支持的方向:
?
3.iOS5以前,可以通过在UIViewController或其子类(UITabBarController、UINavigationController等)中重写以下方法:
?
?
1.当程序中存在UITabBarController时,可以通过category或者继承UITabBarController,覆盖以下方法:
?
?
?
?
2.第二个问题解决方法让我郁闷的时间最长,但是解决的时间也是最快的,原因是我的手机平时都默认竖屏锁定,解开就好了。。。
3.第三个问题在Info.plist中增加字段和AppDelegate中增加代码两种方式的区别。这两种方式的实现效果是一样的,都可以增加全局支持的方向。需要注意的是,AppDelegate中增加的代码仅在iOS6之后的系统生效,如果要支持iOS5以下的系统,还是需要在Info.plist中增加字段。如果两种方式都实现时,所增加的方向以AppDelegate中增加的代码为准;而启动屏幕的方向,以在Info.plist中字段顺序为准。
举个例子,如果在Info.plist中增加字段的顺序为Landscape(right), Landscape(left), Portrait,则启动的时候为横屏;如果在Info.plist中增加字段的顺序为Portrait, Landscape(right), Landscape(left),则启动的时候为竖屏。
相关文章推荐
- spark官方文档之——Quick Star 快速开始
- 成为设计师的五项技能!第三招!
- [前端引用] 利用ajax实现类似php include require 等命令的功能
- UVA - 133 The Dole Queue
- Build subversion 1.8 with SSL on OS X Yosemite
- UITableView滑动按钮的操作
- UIButton的titleEdgeInsets和imageEdgeInsets属性
- XCUIElementAttributes API
- iOS 开发学习38 UIView嵌套UITableView
- UItextfield 动态限制输入的字数
- Uva - 1612 - Guess
- Uva - 1612 - Guess
- iOS.UI.UIWindow
- LeetCode96:Unique Binary Search Trees
- 关于EL表达式中requestScope和param区别,el表达式与jstl标签
- .NET使用ueditor时不能上传图片的问题
- vbox uuid已存在
- quick-3.5 无法使用模拟器修改
- 黑马程序员——Java基础——continue、break、return之间的区别
- EasyUI常用控件的禁用方法