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 下已经不需要了,请业务项目知悉即可。