iOS开发iPad横竖屏适配

2021-09-15  本文已影响0人  ollieli

基于之前的文章做了点更新 2022年02月21:
开发语言:Swift。
开发支持最低系统:iOS10.0。
项目需求:iPad支持全方向展示,iPhone限制竖屏模式(当然也可以放开支持)。

近阶段项目需要适配iPad,需要考虑横竖屏UI适配问题,总结一下我的做法:

项目配置

在General底下同时勾选iPhone,iPad,我们计划通过代码层面来控制页面的方向,所以Device Orientation选项勾选就不重要了:


image.png
具体实现
  1. 在AppDelete中实现旋转所支持的方向,为.all:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
  return .all
}
  1. 定义全局属性:
var screenWidth = UIScreen.main.bounds.width
var screenHeight = UIScreen.main.bounds.height

let isIPad = UIDevice.current.userInterfaceIdiom == .pad

let screenWidthScale = min(UIScreen.main.bounds.width, UIScreen.main.bounds.height) / (isIPad ? 768 : 375)

extension Int {
    func fit() -> CGFloat {
        screenWidthScale * CGFloat(self)
    }
}

举例调用.fit()的代码片段:

override func layoutSubviews() {
  super.layoutSubviews()
  
  let maxY_nav = WindowManager.share.safeAreaInsets.top + navH
  let h_bg = maxY_nav + 160.fit()
  bgImgV.frame = .init(x: 0, y: 0, width: bounds.width, height: h_bg)
}
  1. 在控制器中实现以下代码:
/// 是否支持旋转
override var shouldAutorotate: Bool {
  isIPad
}
/// 支持页面旋转的类型:上下左右
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  isIPad ? .all : .portrait
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
  .portrait
}
  1. 旋转后的布局处理:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
  super.viewWillTransition(to: size, with: coordinator)
  
  if isIPad {
    screenWidth = size.width
    screenHeight = size.height
  }
}
上一篇下一篇

猜你喜欢

热点阅读