4.6.0 - 兼容 iOS 11-16
综述
QMUI 4.6.0 版本主要内容是兼容 iOS 16 及 iPhone 14 等新设备,以屏幕旋转、键盘管理为主。其中屏幕旋转的使用方式可以查看 Wiki:《适用于 iOS 16 及以下版本的屏幕方向控制方式》。
新增功能
QMUIPopupMenuView增加sectionSpacing属性用于控制section之间的间隙。QMUIThemeColor、QMUIThemeImage、QMUIThemeVisualEffect均增加了name属性及对应的 init 方法,让业务可以用字符串来标记该动态对象。- 增加
NSShadow (QMU)分类提供一个便捷的 init 方法。 CALayer (QMUI)增加属性qmui_shadow支持用NSShadow对象来描述投影样式,从而可以一行代码完成投影的设置。NSArray (QMUI)增加方法qmui_firstMatchWithBlock:用于过滤第一个符合 block 条件的元素。UIBezierPath (QMUI)增加方法qmui_bezierPathWithMediaTimingFunction:支持将一个CAMediaTimingFunction转成一条宽高为 1 的贝塞尔曲线(可以理解为数据可视化)。QMUICommonDefines.h增加IOS16_SDK_ALLOWED宏用来标志当前是否为 Xcode 14 编译环境。- 增加
[QMUIHelper screenSizeFor67InchAndiPhone14Later]方法、[QMUIHelper is67InchScreenAndiPhone14Later]方法、IS_67INCH_SCREEN_AND_IPHONE14宏用于标记当前设备是否为 iPhone 14 Pro Max 尺寸的屏幕。 - 增加
[QMUIHelper statusBarHeightConstant]用于获取静态的状态栏高度。 -[QMUIHelper deviceName]、-[QMUIHelper deviceModel]增加新设备的信息。-[QMUIHelper safeAreaInsetsForDeviceWithNotch]增加新设备的值。UIViewController (QMUI_Interface)增加方法qmui_rotateToInterfaceOrientation:用于强制将当前界面旋转到某个指定方向。UIViewController (QMUI_Interface)增加方法qmui_setNeedsUpdateOfSupportedInterfaceOrientations对应 iOS 16 系统的setNeedsUpdateOfSupportedInterfaceOrientations,用于告诉系统当前希望刷新屏幕方向。UITableViewCell (QMUI)增加属性qmui_configureReorderingStyleBlock支持修改 cell 在排序过程中的样式。
会带来 QMUI 新旧版本兼容问题的更新
QMUIPopupContainerView将UIColor *shadowColor属性改为NSShadow *shadow以支持更完整的投影样式。UISlider (QMUI)将qmui_thumbShadowColor、qmui_thumbShadowOffset、qmui_thumbShadowRadius删除,改为新增的qmui_thumbShadow属性。- 使
StatusBarHeightConstant能兼容 iOS 16、iPhone 14 Pro 灵动岛。 - 将 iPhone 14 Pro Max 加入到
AS_65INCH_SCREEN宏内。 - 将 iPhone 14 Pro Max 加入到
-[QMUIHelper isRegularScreen]内。 - 删除
+[QMUIHelper rotateToDeviceOrientation:]方法。
如何适配新版
- 全局搜索使用到
QMUIPopupContainerView.shadowColor的地方,将其改为新的shadow属性。 - 全局搜索使用到
UISlider.qmui_thumbShadowColor、UISlider.qmui_thumbShadowOffset、UISlider.qmui_thumbShadowRadius的地方,将其替换为新的qmui_thumbShadow属性。 - 全局搜索用到
StatusBarHeightConstant的地方,分别测试其在 iPhone 13 和 iPhone 14 Pro 下的布局是否正确。 - 全局搜素用到
AS_65INCH_SCREEN的地方,测试其在 iPhone 14 Pro Max 下的布局是否正确。 - 全局搜索用到
-[QMUIHelper isRegularScreen]的地方,测试其在 iPhone 14 Pro Max 下表现是否正确。 - 全局搜索使用到
+[QMUIHelper rotateToDeviceOrientation:]的地方,将其换成-[UIViewController qmui_rotateToInterfaceOrientation:]。
Bugfix
- #1437 修复在 iOS 15 里打开一个默认隐藏导航栏的界面,返回按钮样式错误的 bug。
- #1438 修复
QMUIPopupContainerView将sourceView设置为nil时 crash 的 bug。 - #1439
UIView.qmui_hitTestBlock的返回值应该添加_Nullable以对齐系统。 - #1447 #1450 #1453 #1458 #1460 解决 iOS 16 下
QMUIKeyboardManager的各种 bug。 - #1449 #1463 修复将
UIView.backgroundColor设置为QMUIThemeColor后再设置为另一个与QMUIThemeColor当前色值相同的颜色时,后者无效的 bug。 - #1451 修复在尚未添加到 window 的
UINavigationController里修改navigationBar可能会导致navigationBar样式错误的 bug。 - #1452 修复开启系统辅助功能粗体文本的情况下,设置了
tintColorAdjustsTitleAndImage的QMUIButton在 App 切到桌面再切回来时颜色错误的 bug。 - #1457 修复 Xcode 14 编译的 App 在 iOS 16.0 上可能存在顶部标题布局错乱的 bug。
- 修复
QMUINavigationTitleView.subAccessoryView在计算布局时如果subAccessoryView带有transform则布局错误的 bug。 - 修复
QMUIPopupContainerView在sourceView、sourceBarItem的值更新时没有清除与旧值的绑定关系的 bug。 - 修复
QMUIPopupContainerView计算宽高可能不准确的 bug:应该取 px 整数而不是 pt 整数。 - 修复
QMUIPopupMenuButtonItem里强制修改button.contentEdgeInsets.top/bottom为 0 的 bug。 - 修复 iOS 16 里
QMUITextView文本颜色设置为QMUIThemeColor后无法响应 theme 变化的 bug。 - 修复
-[QMUIHelper keyboardHeightWithNotification:inView:]在 iOS 16 台前调度下无法返回正确值的 bug。 - 修复
UITableViewCell(QMUI).qmui_selectedBackgroundColor有时候失效的 bug。
其他
- #1378 支持 Mac Catalyst 编译。
- 由于 iOS 16 对横竖屏体验的优化,所以配置表里的
AutomaticallyRotateDeviceOrientation在 iOS 16 下已经不需要了,请业务项目知悉即可。