Skip to content

4.6.0 - 兼容 iOS 11-16

Compare
Choose a tag to compare
@MoLice MoLice released this 07 Dec 19:16
· 11 commits to master since this release

综述

QMUI 4.6.0 版本主要内容是兼容 iOS 16 及 iPhone 14 等新设备,以屏幕旋转、键盘管理为主。其中屏幕旋转的使用方式可以查看 Wiki:《适用于 iOS 16 及以下版本的屏幕方向控制方式》

新增功能

  1. QMUIPopupMenuView 增加 sectionSpacing 属性用于控制 section 之间的间隙。
  2. QMUIThemeColorQMUIThemeImageQMUIThemeVisualEffect 均增加了 name 属性及对应的 init 方法,让业务可以用字符串来标记该动态对象。
  3. 增加 NSShadow (QMU) 分类提供一个便捷的 init 方法。
  4. CALayer (QMUI) 增加属性 qmui_shadow 支持用 NSShadow 对象来描述投影样式,从而可以一行代码完成投影的设置。
  5. NSArray (QMUI) 增加方法 qmui_firstMatchWithBlock: 用于过滤第一个符合 block 条件的元素。
  6. UIBezierPath (QMUI) 增加方法 qmui_bezierPathWithMediaTimingFunction: 支持将一个 CAMediaTimingFunction 转成一条宽高为 1 的贝塞尔曲线(可以理解为数据可视化)。
  7. QMUICommonDefines.h 增加 IOS16_SDK_ALLOWED 宏用来标志当前是否为 Xcode 14 编译环境。
  8. 增加 [QMUIHelper screenSizeFor67InchAndiPhone14Later] 方法、[QMUIHelper is67InchScreenAndiPhone14Later] 方法、IS_67INCH_SCREEN_AND_IPHONE14 宏用于标记当前设备是否为 iPhone 14 Pro Max 尺寸的屏幕。
  9. 增加 [QMUIHelper statusBarHeightConstant] 用于获取静态的状态栏高度。
  10. -[QMUIHelper deviceName]-[QMUIHelper deviceModel] 增加新设备的信息。
  11. -[QMUIHelper safeAreaInsetsForDeviceWithNotch] 增加新设备的值。
  12. UIViewController (QMUI_Interface) 增加方法 qmui_rotateToInterfaceOrientation: 用于强制将当前界面旋转到某个指定方向。
  13. UIViewController (QMUI_Interface) 增加方法 qmui_setNeedsUpdateOfSupportedInterfaceOrientations 对应 iOS 16 系统的 setNeedsUpdateOfSupportedInterfaceOrientations,用于告诉系统当前希望刷新屏幕方向。
  14. UITableViewCell (QMUI) 增加属性 qmui_configureReorderingStyleBlock 支持修改 cell 在排序过程中的样式。

会带来 QMUI 新旧版本兼容问题的更新

  1. QMUIPopupContainerViewUIColor *shadowColor 属性改为 NSShadow *shadow 以支持更完整的投影样式。
  2. UISlider (QMUI)qmui_thumbShadowColorqmui_thumbShadowOffsetqmui_thumbShadowRadius 删除,改为新增的 qmui_thumbShadow 属性。
  3. 使 StatusBarHeightConstant 能兼容 iOS 16、iPhone 14 Pro 灵动岛。
  4. 将 iPhone 14 Pro Max 加入到 AS_65INCH_SCREEN 宏内。
  5. 将 iPhone 14 Pro Max 加入到 -[QMUIHelper isRegularScreen] 内。
  6. 删除 +[QMUIHelper rotateToDeviceOrientation:] 方法。

如何适配新版

  1. 全局搜索使用到 QMUIPopupContainerView.shadowColor 的地方,将其改为新的 shadow 属性。
  2. 全局搜索使用到 UISlider.qmui_thumbShadowColorUISlider.qmui_thumbShadowOffsetUISlider.qmui_thumbShadowRadius 的地方,将其替换为新的 qmui_thumbShadow 属性。
  3. 全局搜索用到 StatusBarHeightConstant 的地方,分别测试其在 iPhone 13 和 iPhone 14 Pro 下的布局是否正确。
  4. 全局搜素用到 AS_65INCH_SCREEN 的地方,测试其在 iPhone 14 Pro Max 下的布局是否正确。
  5. 全局搜索用到 -[QMUIHelper isRegularScreen] 的地方,测试其在 iPhone 14 Pro Max 下表现是否正确。
  6. 全局搜索使用到 +[QMUIHelper rotateToDeviceOrientation:] 的地方,将其换成 -[UIViewController qmui_rotateToInterfaceOrientation:]

Bugfix

  1. #1437 修复在 iOS 15 里打开一个默认隐藏导航栏的界面,返回按钮样式错误的 bug。
  2. #1438 修复 QMUIPopupContainerViewsourceView 设置为 nil 时 crash 的 bug。
  3. #1439 UIView.qmui_hitTestBlock 的返回值应该添加 _Nullable 以对齐系统。
  4. #1447 #1450 #1453 #1458 #1460 解决 iOS 16 下 QMUIKeyboardManager 的各种 bug。
  5. #1449 #1463 修复将 UIView.backgroundColor 设置为 QMUIThemeColor 后再设置为另一个与 QMUIThemeColor 当前色值相同的颜色时,后者无效的 bug。
  6. #1451 修复在尚未添加到 window 的 UINavigationController 里修改 navigationBar 可能会导致 navigationBar 样式错误的 bug。
  7. #1452 修复开启系统辅助功能粗体文本的情况下,设置了 tintColorAdjustsTitleAndImageQMUIButton 在 App 切到桌面再切回来时颜色错误的 bug。
  8. #1457 修复 Xcode 14 编译的 App 在 iOS 16.0 上可能存在顶部标题布局错乱的 bug。
  9. 修复 QMUINavigationTitleView.subAccessoryView 在计算布局时如果 subAccessoryView 带有 transform 则布局错误的 bug。
  10. 修复 QMUIPopupContainerViewsourceViewsourceBarItem 的值更新时没有清除与旧值的绑定关系的 bug。
  11. 修复 QMUIPopupContainerView 计算宽高可能不准确的 bug:应该取 px 整数而不是 pt 整数。
  12. 修复 QMUIPopupMenuButtonItem 里强制修改 button.contentEdgeInsets.top/bottom 为 0 的 bug。
  13. 修复 iOS 16 里 QMUITextView 文本颜色设置为 QMUIThemeColor 后无法响应 theme 变化的 bug。
  14. 修复 -[QMUIHelper keyboardHeightWithNotification:inView:] 在 iOS 16 台前调度下无法返回正确值的 bug。
  15. 修复 UITableViewCell(QMUI).qmui_selectedBackgroundColor 有时候失效的 bug。

其他

  1. #1378 支持 Mac Catalyst 编译。
  2. 由于 iOS 16 对横竖屏体验的优化,所以配置表里的 AutomaticallyRotateDeviceOrientation 在 iOS 16 下已经不需要了,请业务项目知悉即可。