Releases
4.2.2
MoLice
released this
06 Jan 09:43
新增功能
UINavigationController (QMUI)
增加方法 qmui_didInitialize
方便子类重写 init 时的逻辑,因为系统的 UINavigationController
总共有4个 NS_DESIGNATED_INITIALIZER
,子类每次都重写这4个方法成本过高也容易遗漏。
UINavigationController (QMUI)
增加 QMUINavigationAction
枚举用于标志当前 navigationController 的导航动作状态,并提供对应的 qmui_navigationAction
qmui_addNavigationActionDidChangeBlock:
方法便于在某些导航动作产生时做一些事情,免去每个地方自己 hook/override 一遍 setViewControllers、pushViewController、popViewController、popToViewController、... 的麻烦(且 pop 操作有多种,容易遗漏)。
- [QMUINavigationControllerAppearanceDelegate titleViewTintColor]
接口现在对系统的 title 也可以生效(以前仅对 QMUINavigationTitleView
才生效)。
增加 UINavigationItem (QMUI)
,提供多个接口方便访问关联的 navigationBar、navigationController 等信息。
UIViewController (QMUI)
增加 qmui_isDescendantOfViewController:
用于判断当前 vc 是否为指定 vc 本身,或者是其 childViewController、childViewController 的 childViewController、...。
QMUIHelper 增加系列接口对应新发布的 iPhone 设备:
is67InchScreen
is61InchScreenAndiPhone12
is54InchScreen
screenSizeFor67Inch
screenSizeFor61InchAndiPhone12
screenSizeFor54Inch
#1146 @ZenonHuang QMUIHelper 更新 deviceName
以兼容新发布的设备。
QMUIHelper
增加方法 isMac
、QMUICommonDefines.h 增加宏 IS_MAC
用于区分是否 Mac Catalyst App 或 iOS 项目直接在 M1 设备上运行的情况。
QMUICommonDefines.h 增加宏 PreferredValueForInterfaceIdiom(_phone, _pad)
用于区分 phone、pad 两种情况,注意当 iPad 分屏时,如果 App 窗体宽度较窄,也会被视为 phone。
QMUIRuntime.h 增加 qmui_exists_dyld_image
函数用于检测是否存在某个 dyld image。
UITextField (QMUI)
增加方法 qmui_convertNSRangeFromUITextRange:
、qmui_convertUITextRangeFromNSRange:
便于类型转换。
- [QMUIModalPresentationViewControllerDelegate shouldHideModalPresentationViewController:]
现在支持所有显示类型了,之前仅对 window 方式有效。
#1142 QMUIOrderedDictionary
增加 allValues
属性。
#1108 #1113 配置表增加 NavBarContainerClasses
用于限定 NavigationBar 系列开关的生效范围,增加 TabBarContainerClasses
用于限定 TabBar 系列开关的生效范围,增加 ToolBarContainerClasses
用于限定 Toolbar 系列开关的生效范围,从而避免配置表的样式影响系统界面(例如从业务 App 里打开的相册、通讯录、打印等系统界面)。
配置表增加 TabBarItemTitleFontSelected
用于设置选中状态的 UITabBarItem
的字体。
会带来 QMUI 新旧版本兼容问题的更新
-[QMUINavigationController didInitialize]
被标记为废弃,将会在后续版本中被移除,请尽快将其替换为 qmui_didInitialize
。
废弃配置表的 ShouldFixTabBarButtonBugForAll
,改为强制自动修复 #410 描述的系统 bug,因为这种 bug 正常情况下没有“不希望被修复”的诉求。
修正 CALayer (QMUIViewAnimation). qmui_viewAnimationEnabled
拼写错误的问题。
将若干类方法的定义改为类属性(@property (class)
),便于访问。
删除 - [UITabBarItem (QMUIConfiguration) qmui_updateTintColorForiOS12AndEarlier:]
方法。
如何适配新版
检查项目里继承自 QMUINavigationController
的所有子类是否有实现 didInitialize
方法,有的话请将其替换为 qmui_didInitialize
。
全局搜索“qmui_viewAnimaitonEnabled”,将其替换为“qmui_viewAnimationEnabled”。
全局搜索“qmui_updateTintColorForiOS12AndEarlier”,清理用到的地方。
如果你是 Swift 项目,类方法改为类属性可能会导致你的语法需要从 QMUIHelper.deviceName()
替换为 QMUIHelper.deviceName
,由于数量众多,请遇到报错时自行修改。
如果有使用配置表
删除配置表的 ShouldFixTabBarButtonBugForAll
项。
将以下代码添加到配置表中并修改为希望的值:
QMUICMI.navBarContainerClasses = nil ; // NavBarContainerClasses : NavigationBar 系列开关被用于 UIAppearance 时的生效范围(默认情况下除了用于 UIAppearance 外,还用于实现了 QMUINavigationControllerAppearanceDelegate 的 UIViewController),默认为 nil。当赋值为 nil 或者空数组时等效于 @[UINavigationController.class],也即对所有 UINavigationBar 生效,包括系统的通讯录(ContactsUI.framework)、打印等。当值不为空时,获取 UINavigationBar 的 appearance 请使用 UINavigationBar.qmui_appearanceConfigured 方法代替系统的 UINavigationBar.appearance。请保证这个配置项先于其他任意 NavBar 配置项执行。
QMUICMI.tabBarContainerClasses = nil ; // TabBarContainerClasses : TabBar 系列开关的生效范围,默认为 nil,当赋值为 nil 或者空数组时等效于 @[UITabBarController.class],也即对所有 UITabBar 生效。当值不为空时,获取 UITabBar 的 appearance 请使用 UITabBar.qmui_appearanceConfigured 方法代替系统的 UITabBar.appearance。请保证这个配置项先于其他任意 TabBar 配置项执行。
QMUICMI.toolBarContainerClasses = nil ; // ToolBarContainerClasses : ToolBar 系列开关的生效范围,默认为 nil,当赋值为 nil 或者空数组时等效于 @[UINavigationController.class],也即对所有 UIToolbar 生效。当值不为空时,获取 UIToolbar 的 appearance 请使用 UIToolbar.qmui_appearanceConfigured 方法代替系统的 UIToolbar.appearance。请保证这个配置项先于其他任意 ToolBar 配置项执行。
QMUICMI.tabBarItemTitleFontSelected = nil ; // TabBarItemTitleFontSelected : 选中的 UITabBarItem 的标题字体
Bugfix
修复 +[QMUIHelper safeAreaInsetsForDeviceWithNotch]
不准确的 bug。
修复 StatusBarHeightConstant
宏不准确的 bug。
修复 QMUICommonViewController
内置的 QMUINavigationTitleView
无法响应 UIViewController.navigationItem.title
的值的 bug。
修复 dismiss 到一个正在搜索的界面时,状态栏无法正确交给 UISearchController,而是错误地交给 searchController 背后的 vc 的 bug。
修复开启了配置表 NeedsBackBarButtonItemTitle
的情况下,业务自己设置的 UIViewController.navigationItem.backBarButtonItem
会被强制覆盖的 bug。
修复 iOS 12 及以下的系统,通过 [UITabBarItem setTitleTextAttributes:forState:]
设置的 selected 字体无法生效的系统 bug(颜色可以生效,字体不行)。
修复开启了转场动画过程中 navigationBar 效果优化功能后,在转场动画过程中前后界面的样式发生变化,此时无法正确更新假 bar 的问题。
#1087 修复使用了 QMUITheme 后,在 iOS 14 下首次升起键盘会触发 Main Thread Checker 警告的问题,4.2.1 里只是优化,4.2.2 里彻底修复。
#1115 修复 QMUI 某些 description 可能触发 Main Thread Checker 的 bug。
#1120 修复 QMUITextView
点击候选词触发最长字符数限制时,高度变化的回调 newHeightAfterTextChanged
不会调用的 bug。
#1122 修复 QMUITheme
在切换主题时无法刷新 UITabBarItem.selectedImage
的 bug。
#1130 修复配置表 NeedsBackBarButtonItemTitle
、backBarButtonItemTitleWithPreviousViewController:
与系统的 backBarButtonItem
三者互相冲突的问题。
#1148 修复 - [QMUIEmptyView sizeThatContentViewFits:]
高度计算错误的 bug。
#1149 修复 QMUIZoomImageView
在 image/livePhoto/videoPlayerItem 三种内容之间切换时没有清空其他内容,导致缩放错误的 bug。
#1150 修复 QMUIModalPresentationViewController
hide 时没有正确清空 keyboardHeight
的 bug。
#1156 修复 QMUICommonTableViewController
搭配 Storyboard 使用时 crash 的问题。
#1163 修复 QMUIPieProgressView
使用约束布局时圆角有误的 bug。
#1168 #1170 修复 QMUITextField
、QMUITextView
设置了 maximumTextLength
后,在配合系统的三指粘贴/撤销快捷操作时可能引发 crash 的 bug。
#1169 修复 iPad 12-inch 上一旦出现了 QMUIConsole
,界面上其他元素就无法点击的 bug。
#1173 修复 QMUIKeyboardManager
无法兼容系统的“设置→辅助功能→动态效果→减弱动态效果→首选交叉淡出过渡效果”的问题。
其他
优化配置表 PreventConcurrentNavigationControllerTransitions
功能,在切换界面时如果上一次转场动画尚未结束,以前直接屏蔽本次切换,现改为将本次切换的 animated 置为 NO,既能避免 bug,又能允许界面正常切换。
优化 UIView (QMUI)
、UIImageView (QMUI)
内部若干 hook,将 hook 时机从 +load 改为按需。
#1100 iOS 14.2 开始,系统已经修复了该问题,因此 QMUI 新版本里对 iOS 14.2 及以后的版本都屏蔽了相关代码。
You can’t perform that action at this time.