Skip to content

4.2.3

Compare
Choose a tag to compare
@MoLice MoLice released this 31 Mar 05:36
· 51 commits to master since this release

新增功能

  1. 增加 UICollectionView(QMUI) 提供 qmui_selectedBackgroundColor 属性便于设置点击时的背景色,同时也更便于兼容 QMUITheme
  2. QMUIEmotionView 增加 verticalAlignment 等若干属性以支持类似微信的竖向滚动交互。
  3. QMUIButton 增加属性 cornerRadius 用于更方便地设置按钮圆角,同时提供常量 QMUIButtonCornerRadiusAdjustsBounds 使其可以维持圆角为按钮高度的一半,不用业务自己在按钮大小发生变化时更新圆角值。
  4. UIColor(QMUI) 增加方法 qmui_distanceBetweenColor: 用于计算两个颜色之间的相近程度,原理是将两个颜色转换为 HSB 模型后取两点之间的距离,注意该方法会忽略 alpha 通道。
  5. UISearchBar(QMUI) 增加属性 qmui_searchController 用于获取与当前 searchBar 绑定的 UISearchController 对象。
  6. UISearchBar(QMUI) 增加属性 qmui_alwaysEnableCancelButton 支持当某个 searchBar 脱离 UISearchController 存在时,强制使其 cancelButton 一直处于 enabled 状态(系统默认在输入框聚焦时 enabled,失焦时 disabled,这通常不是我们想要的)。
  7. UITabBar(QMUI) 增加属性 qmui_effectView 用于获取内部的磨砂 view。
  8. UITabBar(QMUI) 增加属性 qmui_effect 支持直接修改 tabBar 的磨砂类型(系统仅在 iOS 13 及以后才支持)。
  9. UITabBar(QMUI) 增加属性 qmui_effectForegroundColor 支持精准指定 tabBar 磨砂的前景色,系统默认是无法做到这一点的,因为 UIVisualEffectView 在某些 blur style 下会有自带的一层前景色,且无法修改,你设置的前景色最终会和系统的前景色叠加,导致总是无法精准实现业务所需效果。
  10. UITableView(QMUI) 增加属性 qmui_indexFrame 用于获取 tableView 右边那条 sectionIndex 索引条的 frame
  11. UITableViewCell(QMUI) 增加属性 qmui_didAddToTableViewBlock 便于在 cell 能拿到 tableView 引用的第一时间做一些事情,例如根据不同 style 的 tableView 作不一样的样式区分。
  12. UITableViewCell(QMUI) 增加属性 qmui_configureStyleBlock 让 cell 层面也能得到 willDisplayCell 的渲染时机,在这个 block 里你可以拿到 tableView 的引用,也可以知道当前 cell 的 indexPathqmui_cellPosition 等信息,便于你做一些全局样式的管理。
  13. -[UIImage imageWithTintColor:]-[UIImage qmui_imageWithTintColor:] 支持将静态 image 和动态 color 组合为动态 image,在此之前你需要手动创建一个动态 image,在 provider block 里根据动态 color 的不同值生成不同的 image。

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

  1. 由于 QMUIButton 增加的 cornerRadius 圆角接口,原本在子类 QMUIFillButtonQMUIGhostButton 里自行实现的 cornerRadius 均被去除,对应的常量 QMUIFillButtonCornerRadiusAdjustsBoundsQMUIGhostButtonCornerRadiusAdjustsBounds 也一并删除。
  2. 将上个版本被标记为已废弃的 +[QMUIThemeManager sharedInstance] 方法彻底删除。
  3. #1193 由于修复 UIViewController.qmui_tabBarSpacingInViewCoordinator未考虑 hidesBottomBarWhenPushed = YES 的情况的 bug,所以以前某个 vc 如果 hidesBottomBarWhenPushed = YES,但却利用 qmui_tabBarSpacingInViewCoordinator 去获取布局信息,那么在新版本更新后,这个 vc 里拿到的值将为 0。0 是正确的,因为此时 tabBar 不可见,但却可能导致业务界面产生与 QMUI 4.2.2 不同的表现。
  4. #1219 QMUINavigationControllerTransitionDelegate 里提供的接口 navigationController:poppingByInteractiveGestureRecognizer:viewControllerWillDisappear:viewControllerWillAppear: 无法直观判断手势返回最终是成功了还是取消了,因此新版本为其增加了新参数 isCancelled,同时将旧方法标记为废弃,建议尽快替换为新方法。
  5. 由于设计师的回归,这个版本 QMUI Demo 调整了默认的 logo、配色,理论上不应该对业务项目产生任何影响(因为 QMUI Demo 是一个独立的示例项目),但保险起见,在 Release Note 里明确写出。

如何适配新版

  1. 全局搜索“QMUIFillButtonCornerRadiusAdjustsBounds”、“QMUIGhostButtonCornerRadiusAdjustsBounds”,将其换成新的 QMUIButtonCornerRadiusAdjustsBounds
  2. 全局搜索使用 +[QMUIThemeManager sharedInstance] 的地方,将其删除,并考虑用 QMUIThemeManagerCenter.defaultThemeManager 代替。
  3. 全局搜索用到 qmui_tabBarSpacingInViewCoordinator 的地方,检查该界面是否 hidesBottomBarWhenPushed = YES 且非 UINavigationControllerrootViewController,如果存在该情况,请注意它的布局是否正常。
  4. 全局搜索用到 navigationController:poppingByInteractiveGestureRecognizer:viewControllerWillDisappear:viewControllerWillAppear: 的地方,为其增加参数 isCancelled,具体参数的位置请查看 QMUI 源码。

Bugfix

  1. #999 修复 QMUITextView 在输入过程中从一行换到两行时会产生的跳动问题,同时修复 QMUITextView 初始化后通过代码设置 text,后续手动聚焦输入文字瞬间会跳动的 bug。
  2. #1161 [UIKit Bug] 修复将 UISearchBar 作为 tableHeaderView 使用的 UITableView,如果同时设置了 estimatedRowHeight,则 contentSize 会错乱,导致滚动异常的系统 bug。
  3. #1176 修复在 MainThreadChecker 开启的状态下使用了 QMUITheme 后可能导致“directTraitCollectionIMP EXC_BAD_ACCESS”的 bug。
  4. #1177 修复 iOS 14.0-14.2,setViewControllers: 去到一个 hidesBottomBarWhenPushed = NO 的界面会 crash 的 bug。
  5. #1180 修复 UINavigationController 不可见的情况下进行 pop 操作会命中 UINavigationController+QMUI.m 内的 NSAssert 的问题,同时借机优化 #261-[UINavigationController pushViewController:animated:]isViewControllerTransiting 的使用逻辑。
  6. #1181 修复 QMUITextView 在显示 placeholdersizeThatFits: 返回的结果没有包含 placeholder 占位大小的 bug。
  7. #1187 修复 -[UITabBarItem(QMUI) qmui_imageViewInTabBarButton:] 方法在打开了系统的“辅助功能-显示与文字大小-按钮形状”后无法获取到正确 imageView 的 bug。
  8. #1190 修复 iOS 12 及以下,在 rootViewController、以 animated:NO 进行的 push/pop 界面,- [QMUINavigationControllerDelegate titleViewTintColor] 无效的 bug。
  9. #1192 修复 - [QMUIMultipleDelegates respondsToSelector:] 不支持 NSProxy 类型的 delegate 成员的 bug。
  10. #1198 修复 +[QMUIHelper isRegularScreen] 对 iPhone 12/12 Pro 判断错误,导致横屏时获取导航栏高度错误的 bug。
  11. #1200 修复 QMUIConsole 在子线程里输出 log 会 crash 的 bug。
  12. #1207 [UIKit Bug] 修复将 UISearchBar 作为 UITableView.tableHeaderView 使用时,如果列表内容不满一屏,可能出现搜索框不可视的系统 bug。
  13. #1210 修复 - [QMUINavigationControllerDelegate titleViewTintColor] 在 iOS 12 下手势返回又取消后可能出错的 bug。
  14. #1213 [UIKit Bug] 修复 UISearchBar 作为 tableHeaderView 使用时,切换 tableView 的 sectionIndex 的显隐,searchBar 的布局可能无法刷新的系统 bug。
  15. #1215 [UIKit Bug] 修复将 UISearchBar 作为 tableHeaderView 使用的 UITableView,在 tableView 尚未添加到 window 上就同时进行了 setTableHeaderView:reloadData 的操作,会导致滚动异常的系统 bug。
  16. #1216 修复 iOS 12 及以下,QMUITableViewStyleInsetGrouped 在编辑、排序状态下布局错误的 bug。
  17. #1217 [UIKit Bug] 修复 iOS 12 及以上的系统,如果设置了自己的 leftBarButtonItem,且 title 很长时,则当 pop 的时候,title 会瞬间跳到左边,与 leftBarButtonItem 重叠的系统 bug。
  18. #1218 修复 UITabBarItem.selectedImage 无法二次更新的 bug。
  19. 修复高帧率设备下 QMUIDisplayLinkAnimation 动画时长减半的 bug。
  20. 修复 QMUINavigationBarScrollingAnimatorbarTintColorBlock 属性无效的 bug。
  21. 修复 NSString(QMUI) 提供的 qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:lessValue:countingNonASCIICharacterAsTwo:qmui_substringAvoidBreakingUpCharacterSequencesToIndex:lessValue:countingNonASCIICharacterAsTwo: 这两个方法里当参数 countingNonASCIICharacterAsTwoYES 时,没有将参数 index 按照 countingNonASCIICharacterAsTwo 的规则来计算的 bug。
  22. 修复 UITableView(QMUI).qmui_validContentWidth 属性在列表出现右边的 sectionIndex 索引条时返回的宽度错误的 bug。

其他

  1. #1166 QMUIConsole 的实现从 textView 改为 tableView,以优化在展示大量 log 时的性能,同时也优化了搜索的关键词高亮体验。
  2. #1220 优化 QMUI 内的 valueForKey: 用法可能存在一些风险。
  3. #1214 @0x1306a94 兼容未启用 CLANG_ENABLE_MODULES 时通过 CocoaPods 集成会产生的编译错误。
  4. 配置表 NavBar 系列属性发生变化时会去刷新当前界面的 navigationBar,如果该界面有通过 QMUINavigationControllerDelegate 提供的统一接口去自定义业务界面自己的样式,则配置表不需要强制帮它刷新。