关于iOS屏幕旋转的一些注意事项
发布时间 - 2026-01-10 22:31:10 点击率:次前言

最近有个需求,是在App中有一个查看文件的页面,由于查看文件横屏会更方便阅读,所以boss说要让这个页面可以横屏。之前都没有接触过横屏的具体实现方法,一开始走了不少弯路,而且各种bug。在这里把遇到的问题分享一下,希望对大家有点帮助。
要让你的APP支持旋转,你需要进行如下几个步骤
1、 全局配置
在工程->TARGETS->General->Deployment Info中配置
在AppDelegate中配置
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
2、 全局配置做好了,你就可以在控制器中实现相应的旋转方法来让你的APP支持旋转了
我们需要在什么地方实现控制器的旋转方法呢?
有以下两种情况
1、当前控制器是window的rootViewController由rootViewController来管理旋转的相关方法
典型的有 UINavigationController、UITableBarController
2、当前控制器是modal模式的时(控制器为modal显示的控制器),由该控制器自己管理旋转的相关方法
即控制器是通过 presentViewController:animated:completion: 方式出来的
控制器的旋转方法介绍
控制器的旋转方法在iOS6之前和之后有了比较大的变化
1、在iOS6 之前只需要实现下面这个方法就可以
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
2、在iOS6之后由下面两个方法替代
//是否支持旋转
- (BOOL)shouldAutorotate {
return YES;
}
//所支持的方法集合,是一个枚举类
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
下面我重点讲一下在iOS6之后旋转方法的使用情况。因为在iOS6+、7、8中和iOS9中这两个方法的调用顺序以及处理逻辑是不一样的(坑)
控制器的旋转方法使用
1、iOS6+、7、8中会先调用shouldAutorotate判断屏幕是否支持旋转
- 该方法返回YES,就会去调用supportedInterfaceOrientations检查控制器支持的方向枚举集合,如果存在符合设备所处的方向枚举集合,屏幕会执行相应的旋转,如果不存在设备所处的方向枚举,屏幕就不会旋转,停止检查
- 该方法返回NO,屏幕不能够旋转,停止检查
2、iOS9+中会先调用supportedInterfaceOrientations来检查控制器支持的方向枚举集合
- 如果方向枚举集合中没有符合设备所处的方向枚举,就不会去调用shouldAutorotate方法,屏幕不会旋转,停止检查
- 如果方向枚举集合中有符合设备所处的方向枚举,那么就会去调用shouldAutorotate方法
如果该返回YES,屏幕执行相应的旋转
如果该返回NO,屏幕不会旋转,停止检查
3、关于preferredInterfaceOrientationForPresentation方法,该方法的作用是返回最优先显示的屏幕方向。在iOS7之后就不会调用了,但是网上说在iOS7之前需要加上,不加会崩溃(没有亲测)
总结
写这边文章主要是因为之前在网上看了很多资料,但是并有提到旋转方法他们的调用顺序以及处理逻辑的介绍,大部分都是抄来抄去,没有经过自己试验的代码也贴到网上来,坑了我千万遍。
以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能有一定的帮助,亲身试验的东西才是硬道理,如果有疑问大家可以留言交流。
# ios10屏幕旋转
# ios监听屏幕旋转
# ios
# 屏幕旋转适配
# IOS 屏幕适配方案实现缩放window的示例代码
# iOS屏幕适配开发实用技巧
# iOS实现手动和自动屏幕旋转
# iOS屏幕旋转与锁屏的示例代码
# 配置iOS 16 屏幕旋转适配实例详解
# 所处
# 会去
# 中有
# 要让
# 会先
# 都是
# 是一个
# 他们的
# 是在
# 在这里
# 看了
# 有个
# 走了
# 就不
# 两种
# 网上
# 有一定
# 这两个
# 不存在
# 只需要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Python制作简易注册登录系统
如何快速完成中国万网建站详细流程?
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
高端建站三要素:定制模板、企业官网与响应式设计优化
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何快速搭建安全的FTP站点?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
如何确保FTP站点访问权限与数据传输安全?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
html如何与html链接_实现多个HTML页面互相链接【互相】
如何快速选择适合个人网站的云服务器配置?
黑客入侵网站服务器的常见手法有哪些?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何在橙子建站上传落地页?操作指南详解
如何在Windows服务器上快速搭建网站?
Android okhttputils现在进度显示实例代码
如何快速生成橙子建站落地页链接?
node.js报错:Cannot find module 'ejs'的解决办法
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Python结构化数据采集_字段抽取解析【教程】
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
电商网站制作价格怎么算,网上拍卖流程以及规则?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
如何在建站宝盒中设置产品搜索功能?
如何在企业微信快速生成手机电脑官网?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
lovemo网页版地址 lovemo官网手机登录
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何自定义建站之星模板颜色并下载新样式?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
如何快速生成专业多端适配建站电话?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
如何快速建站并高效导出源代码?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
php json中文编码为null的解决办法
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
大学网站设计制作软件有哪些,如何将网站制作成自己app?
微信推文制作网站有哪些,怎么做微信推文,急?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】

