• 之前一直想研究一下屏幕的旋转问题,看到网上的例子太多不太统一,所以今天研究了一下话不多说直接上代码
  • 首先设置一下AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate {var blockRotation : UIInterfaceOrientationMask = .portrait{didSet{if blockRotation.contains(.portrait){//强制设置成竖屏UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")}else{//强制设置成横屏UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")}}}func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {return true}func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {print("AppDelegate ---supportedInterfaceOrientationsFor")return blockRotation}
}
  • 然后在自己需要旋转的ViewController中做如下操作,我这个例子是点击的按钮的时候才旋转
import UIKitclass InterFaceOrientationViewController: UIViewController {override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)// 这里是一开始到这个界面就开始旋转屏幕
//        let kAppdelegate : AppDelegate? = UIApplication.shared.delegate as? AppDelegate
//        kAppdelegate?.blockRotation = UIInterfaceOrientationMask.landscapeRight}override func viewDidLoad() {super.viewDidLoad()self.view.backgroundColor = UIColor.whiteself.title = "详情"let btn = UIButton(type: .custom)btn.backgroundColor = UIColor.redbtn.setTitle("旋转屏幕", for: .normal)btn.setTitleColor(UIColor.black, for: .normal)btn.addTarget(self, action: #selector(actionBtn(sender:)), for: .touchUpInside)self.view.addSubview(btn)btn.snp.makeConstraints { make inmake.center.equalTo(self.view.snp.center)}}@objc func actionBtn(sender:UIButton){sender.isSelected = !sender.isSelectedlet kAppdelegate : AppDelegate? = UIApplication.shared.delegate as? AppDelegateif(sender.isSelected){kAppdelegate?.blockRotation = UIInterfaceOrientationMask.landscapeRight}else{kAppdelegate?.blockRotation = .portrait}}override var prefersStatusBarHidden: Bool {return false}override var preferredStatusBarStyle: UIStatusBarStyle{return UIStatusBarStyle.lightContent}override func viewWillDisappear(_ animated: Bool) {super.viewWillDisappear(animated)let kAppdelegate : AppDelegate? = UIApplication.shared.delegate as? AppDelegatekAppdelegate?.blockRotation = UIInterfaceOrientationMask.portrait}override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {super.viewWillTransition(to: size, with: coordinator)print("屏幕旋转")}/*// MARK: - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigationoverride func prepare(for segue: UIStoryboardSegue, sender: Any?) {// Get the new view controller using segue.destination.// Pass the selected object to the new view controller.}*/}
  • 到这屏幕旋转的例子就结束了
  • 下面讲一下状态栏的显示与隐藏和状态栏的style修改
  • 在网上找的例子都是在 需要隐藏和修改style的ViewController 重写这两个方法:
override var prefersStatusBarHidden: Bool {return false}override var preferredStatusBarStyle: UIStatusBarStyle{return UIStatusBarStyle.lightContent}
  • 但是在实际的开发过程中,很少应用单个的ViewController作为开发,大多数都是使用UINavigationController + UIViewController 这种模式开发,所以光在ViewController 中重写上面的两个方法是不够的,需要自定义一个 UINavigationController 在其内部重写这两个方法:

class MainNavigationViewController: UINavigationController {override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.}override var prefersStatusBarHidden: Bool{return self.topViewController?.prefersStatusBarHidden ?? false}override var preferredStatusBarStyle: UIStatusBarStyle{return self.topViewController?.preferredStatusBarStyle ?? UIStatusBarStyle.default}}
  • 然后加上上述中ViewController中的两个方法就能实现状态栏的显示与隐藏和style的变化

【Swift5.1】屏幕旋转+ 状态栏的隐藏相关推荐

  1. html 屏幕旋转,屏幕旋转与Transform

    iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好. 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Suppo ...

  2. iOS开发中屏幕旋转(一)

    Morris_ 2018.11.24 前言 最近做一个关于在线视频互动的iPad项目,部分界面只要横屏,部分界面可以横竖屏转换.看了看别家做的项目,有些是只做竖/横屏,有些是支持了横竖屏转换,在iPa ...

  3. IOS:屏幕旋转与Transform

    iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好. 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Suppo ...

  4. iOS 动态控制屏幕旋转

    本文讲述动态控制自动旋转方向(1到3),手动旋转屏幕方向(第4),以及通过旋转vc的view假旋转屏幕方向. 1.配置vc可以旋转 在需要配置方向的vc中 覆盖这个函数 - (BOOL)shouldA ...

  5. Android全屏显示和屏幕旋转的处理

    全屏显示 全屏隐藏状态栏 Window window = getWindow(); int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN; req ...

  6. android 系统状态栏的隐藏和显示

    今天,简单讲讲android如何控制  系统状态栏的隐藏和显示. 昨天遇到这个问题,找了好久资料才解决,这里记录一下. 网上流传着很多种做法.比如: 1.在AndroidManifest.xml文 ...

  7. iOS屏幕旋转技术点及解决方案总结

    1.屏幕旋转相关枚举 关于屏幕旋转枚举一共有3种: UIInterfaceOrientation,    UIInterfaceOrientationMask,   UIDeviceOrientati ...

  8. Android屏幕旋转,赶紧学习一下

    ActivityInfo.SCREEN_ORIENTATION_SENSOR //根据传感器设置方向 ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR //根据传 ...

  9. iPhone屏幕旋转机制详解

    主要说一下本人对iOS6.0及以前版本中对屏幕旋转的操作:包括重力感应旋转和强制旋转. 首先说一下重力感应引起的屏幕旋转. 在iOS6.0以前,只需要UIViewController的子类重载 - ( ...

最新文章

  1. 盖茨、奥巴马、马斯克账号被黑,推特遭大规模黑客攻击
  2. python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...
  3. html5页面常用的代码,最全的 HTML5 知识汇总
  4. jdialog模态化
  5. 值类型与引用类型数据运算
  6. Kaggle 商品销量预测季军方案出炉,应对时间序列问题有何妙招
  7. 面试准备——springboot相关
  8. __VA_ARGS__和##__VA_ARGS__的区别(转载)
  9. 阶段3 2.Spring_06.Spring的新注解_6 Qualifier注解的另一种用法
  10. 群晖服务器怎么做文件转移,群晖(黑) 篇五:群晖系统迁移:旧群晖数据和系统转移到新机器...
  11. 一篇比较好的高数的学习规划分享
  12. Python之文本去重(基础版)
  13. php无限分类算法,php递归算法 php递归函数无限级分类
  14. PHP基础教程(一)PHP快速入门
  15. 数据分析相关职位分析与可视化
  16. 体验服官网和平精英维护服务器,和平精英体验服怎么注册?和平精英体验服注册流程...
  17. 微信怎么收银行卡的消息服务器,微信零钱提现,这样操作,可以免去手续费
  18. FLEXPART安装笔记,ubantu,grib_api,eccodes,NetCDF
  19. 【媒体管家】媒体邀约以及媒介投放策略
  20. Python从入门到实践第9章课后作业

热门文章

  1. 千里之行始于足下——虚幻引擎学习之路(一)
  2. dubbo 请求调用过程分析
  3. 手机号段正则表达式 (2019-01 最新)
  4. 基于 MATLAB 的模糊逻辑系统设计
  5. 机器学习(学习笔记)一
  6. **史上最全的倾斜测量/实景三维应用汇总**
  7. 微信公众号支付申请配置流程
  8. 一键导出资料(图片和PDF)到ZIP
  9. 如何让图片放大不模糊 ?解决方法介绍
  10. 人人都是英语学习 划词翻译-开源