tag:github.com,2008:https://github.com/Tencent/QMUI_iOS/releases
Release notes from QMUI_iOS
2024-09-21T22:10:01Z
tag:github.com,2008:Repository/76934279/4.8.0
2024-09-21T22:22:36Z
4.8.0
<h2>综述</h2>
<p>该版本主要包含内网积累的若干更新,以及对 iOS 18.0 的基本兼容(也即能跑就行,细节 bug 的修复后续再说)。</p>
<h2>新增功能</h2>
<ol>
<li><code>QMUIBadgeProtocol</code> 增加属性 <code>qmui_badgeViewDidLayoutBlock</code>、<code>qmui_updatesIndicatorViewDidLayoutBlock</code> 允许业务方便地基于 QMUI 已有的角标布局去调整自定义的布局,以前只能通过 offset 值调整,而 offset 值在复杂场景通常很难计算出来。</li>
<li><code>QMUIButton</code> 增加 <code>subtitle</code> 系列属性以支持上下两行文本。</li>
<li>增加 <code>QMUICheckbox</code> 组件及其 Demo。</li>
<li>增加 <code>QMUILayouter</code> 组件及其 Demo 以实现一种简便的 CSS Flexbox 布局模型。</li>
<li><code>QMUIModalPresentationViewController</code> 增加属性 <code>shouldBecomeKeyWindow</code>,允许业务升起一个非 keyWindow 的浮层,避免影响已有界面的键盘显隐(例如 QMUIDemo 里的<br>
<code>QMUIDropdownNotification</code> 应用内顶部下拉通知条则关闭了该属性,从而避免当键盘正在显示时来了一个顶部通知,会把键盘强制降下去的问题)。</li>
<li><code>QMUINavigationTitleView</code> 增加 <code>padding</code> 属性用于调整布局,增加 <code>adjustsSubviewsWhenHighlighted</code> 属性用于屏蔽默认的点击高亮表现。</li>
<li><code>QMUIPopupContainerView</code> 增加 <code>preferLayoutAlignment</code>、<code>usesOppositeLayoutAlignmentIfNeeded</code> 属性用于控制浮层对准目标位置时,与目标位置的左右对齐方式。</li>
<li><code>QMUIPopupContainerView</code> 增加 <code>setNeedsUpdateLayout</code> 方法代替原有的 <code>updateLayout</code>,用于避免同一个 runloop 内重复刷新布局的问题。</li>
<li><code>QMUIPopupContainerView</code> 增加 <code>showingAnimationBlock</code>、<code>hidingAnimationBlock</code> 属性以供业务自定义自己的显隐动画。</li>
<li><code>QMUISearchController</code> 增加 <code>initWithContentsViewController: resultsViewController:</code> 方法、<code>searchResultsController</code> 属性允许业务自定义搜索结果界面。</li>
<li><code>QMUISearchController</code> 增加 <code>supportsSwipeToDismissSearch</code> 属性用于支持侧滑手势退出搜索。</li>
<li>增加 <code>QMUISheetPresentation</code> 组件用于支持类似微信内临时的半屏聊天界面、视频号评论区那种半屏浮层,可在显示半屏浮层的同时以普通 push 的方式打开下一级界面,这是区别于 <code>QMUIModalPresentationViewController</code> 的关键点。</li>
<li><code>QMUITextView</code> 增加属性 <code>isDeletingDuringTextChange</code> 用于在文本发生变化时判断当前是否正在删除。</li>
<li><code>QMUIHelper</code> 增加 <code>isDynamicIslandDevice</code> 属性用于区分当前设备是否拥有灵动岛。</li>
<li><code>QMUIHelper</code> 增加 <code>baselineOffsetWhenVerticalAlignCenterInHeight:withFont:</code> 方法,用于计算出能让指定字体在给定行高内垂直居中的 baselineOffset 值。</li>
<li><code>NSAttributedString (QMUI)</code> 增加 <code>qmui_textAlignment</code> 属性用于便捷地获取/修改富文本里的文字对齐方式,增加 <code>qmui_applyParagraphStyle:</code> 方法用于便捷地修改富文本里的段落样式。</li>
<li>增加 <code>NSRegularExpression (QMUI)</code> 分类,支持正则对象的缓存(因为正则对象的创建是个耗时操作),以优化高频使用正则表达式场景的性能。</li>
<li><code>UIImage (QMUI)</code> 增加属性 <code>qmui_name</code> 以获取图片在 ImageAsset 里的命名。</li>
<li><code>UIScrollView (QMUI)</code> 增加方法 <code>qmui_scrollToRect:atPosition:animated:</code> 以方便地控制滚动位置。</li>
<li><code>UISearchBar (QMUI)</code> 增加属性 <code>qmui_adjustTextFieldLayoutForIndexBar</code> 用于控制当 <code>UITableView</code> 显示右边的 A-Z 索引条时,搜索框内的输入框是否要自动调整布局以避免与索引条重叠的特性。</li>
<li><code>UISearchController (QMUI)</code> 增加属性 <code>qmui_alwaysShowSearchResultsController</code> 用于实现即便搜索框文本为空依然可以一直显示搜索结果界面的功能(系统默认是搜索文本不为空才显示)。</li>
<li><code>UITableViewCell (QMUI).qmui_accessoryView</code> 现在支持获取到系统的排序按钮等控件。</li>
<li><code>UITextView (QMUI)</code> 增加 <code>qmui_updateContentSize</code> 方法以刷新内容尺寸。</li>
<li><code>UIWindow (QMUI)</code> 增加 <code>qmui_canBecomeKeyWindow</code>、<code>qmui_canResignKeyWindowBlock</code> 用于控制 window 的 key 状态。</li>
</ol>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li><code>QMUIAlertController</code> 的成员变量 <code>_maskView</code> 重命名为 <code>_dimmingView</code>,属性 <code>shouldRespondMaskViewTouch</code> 重命名为 <code>shouldRespondDimmingViewTouch</code>。</li>
<li><code>QMUIToastView</code> 的属性 <code>maskView</code> 重命名为 <code>dimmingView</code>。</li>
<li><code>QMUIBadgeProtocol</code> 里的 <code>qmui_badgeLabel</code> 重命名为 <code>qmui_badgeView</code>,且类型从 <code>QMUILabel</code> 改为更通用的 <code>UIView</code>,也即支持自定义 View 作为角标。</li>
<li>重构 <code>QMUIPopupMenuView</code> 组件,内部改为 <code>UITableView</code> 的实现,以满足大数据量场景下的性能要求,同时内置单选、多选模式及对应的 UI 表现,具体请查看 QMUI Demo 的新示例。</li>
<li><code>- [NSArray qmui_mapWithBlock:]</code> 方法增加 index 参数。</li>
<li>删除 <code>- [UIActivityIndicatorView initWithActivityIndicatorStyle: size:]</code> 方法,改为通过 hook 来实现以普通 <code>setFrame:</code> 方式调整其尺寸。</li>
<li>配置表 <code>NavBarTitleColor</code> 的生效范围从 <code>QMUINavigationTitleView</code> 类型的 <code>titleView</code> 扩大为 <code>UIView.qmui_useAsNavigationTitleView == YES</code>。</li>
<li>配置表删除废弃的 <code>badgeCenterOffset</code>、<code>badgeCenterOffsetLandscape</code>、<code>updatesIndicatorCenterOffset</code>、<code>updatesIndicatorCenterOffsetLandscape</code>。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>若项目内有继承自 <code>QMUIAlertController</code> 的子类,请检查是否有用到成员变量 <code>_maskView</code>,若有,则重命名为 <code>_dimmingView</code>。</li>
<li>全局搜索“shouldRespondMaskViewTouch”,将其改为“shouldRespondDimmingViewTouch”。</li>
<li>全局搜索用到 <code>QMUIToastView.maskView</code> 的地方,将其改为 <code>dimmingView</code>。</li>
<li>全局搜索“qmui_badgeLabel”,将其改为“qmui_badgeView”。</li>
<li>由于 <code>QMUIPopupMenuView</code> 整个重写,带来大量的类型、接口变更,在此无法一一列出适配方式,所以请直接参考 QMUI Demo 的写法,自行修改,遇到不清楚的可提 Issue。</li>
<li>全局搜索“qmui_mapWithBlock”将用到的地方改为新的带 index 参数的 block。</li>
<li>全局搜索用到 <code>- [UIActivityIndicatorView initWithActivityIndicatorStyle: size:]</code> 的地方,将其改为普通的 init。</li>
<li>若有使用配置表,请观察界面的顶部 <code>titleView</code> 颜色是否保持与更新前一致。</li>
<li>若有使用配置表,请不区分大小写地搜索“badgeCenterOffset”、“badgeCenterOffsetLandscape”、“updatesIndicatorCenterOffset”、“updatesIndicatorCenterOffsetLandscape”,将用到的地方改为 <code>badgeOffset</code>、<code>badgeOffsetLandscape</code>、<code>updatesIndicatorOffset </code>、<code>updatesIndicatorOffsetLandscape </code>。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2122768696" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1542" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1542/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1542">#1542</a> 修复特殊字符可能引发的 substring crash。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2382984575" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1557" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1557/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1557">#1557</a> 修复因与系统 <code>UIView.maskView</code> 属性重名,导致 Xcode 16、iOS 18 运行 QMUI 可能命中系统断言的 bug。</li>
<li>修复 <code>QMUIKeyboardManager</code> 获取键盘所在 view、window 方法的 bug。</li>
<li>修复 <code>QMUITextField.maximumTextLength</code> 当光标在文本中间时,触发长度限制裁剪文本,会把文本末尾的文字裁剪(预期应该是光标前面的文本)的 bug。</li>
<li>修复 <code>flat</code> 系列函数因浮点精度问题导致无法计算出最接近的像素整数值的 bug。</li>
<li>优化 <code>QMUIHelper.deviceModel</code> 方法的实现方式,避免频繁获取值,以满足隐私合规的要求。</li>
<li>修复 <code>QMUIHelper.navigationBarMaxYConstant</code> 在灵动岛设备上返回值错误的 bug。</li>
<li>修复 <code>QMUIStringPrivate</code> 里提供的若干 substring 的方法在某些场景无法正确返回 <code>NSAttributedString</code> 类型的 bug。</li>
<li>修复设置了 <code>UILabel (QMUI).qmui_lineHeight</code> 属性后文字无法正确垂直居中的 bug。</li>
<li>修复 <code>UINavigationController (QMUI).qmui_rootViewController</code> 属性在某些极端场景下可能得到错误返回值的 bug。</li>
<li>修复 <code>UIViewController (QMUI).qmui_previousViewController</code> 属性在某些极端场景下可能得到错误返回值的 bug。</li>
<li>修复 <code>UIScrollView (QMUI).qmui_alreadyAtBottom</code> 可能因浮点精度问题导致返回值错误的 bug。</li>
<li>修复 <code>UISlider (QMUI)</code> 可能获取 step 位置错误的 bug。</li>
<li>修复 <code>UITabBarItem (QMUI).qmui_doubleTapBlock</code> 在 <code>UITabBarItem.title</code> 变化时无效的 bug。</li>
<li>修复 <code>UITabBarItem (QMUI).qmui_doubleTapBlock</code> 在 iOS 18 下无效的 bug。</li>
<li>修复设置过 <code>qmui_separatorInsetsBlock</code> 再置为 nil 后可能出现的 crash。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.7.0
2023-07-24T16:10:13Z
4.7.0
<h2>综述</h2>
<p>随着 QMUI 最初的几位老人家各奔天涯,历经7年自费集资的<a href="https://qmuiteam.com" rel="nofollow">老官网 qmuiteam.com</a>在不久的将来费用消耗完就不再维护了,以后都在 GitHub。对应地,依附于官网的自动上报统计 <code>SendAnalyticsToQMUITeam</code> 也在这个版本删除,借此也跟大家分享下统计数据(毕竟在座的各位都参与其中)。</p>
<p>截止至2023-7-24,QMUI iOS 累计接入6w项目(以Bundle Id为维度),日活跃项目 1.6k+,月活跃项目 4.3k+。</p>
<hr>
<p>这个版本主要是累积这段时间的修修补补。</p>
<h2>新增功能</h2>
<ol>
<li>令 <code>qmui_outsideEdge</code> 对 <code>UIBarButtonItem.customView</code> 也生效,以后你可以让导航栏按钮的响应区域扩大到导航栏之外了。</li>
<li><code>CALayer(QMUI)</code> 增加属性 <code>qmui_maskPathBlock</code> 用于快捷添加遮罩。</li>
<li><code>CALayer(QMUI)</code> 增加属性 <code>qmui_evenOddMaskPathBlock</code> 用于快捷镂空一个区域。</li>
<li><code>NSArray(QMUI)</code> 增加方法 <code>qmui_compactMapWithBlock:</code> 用于转换数组里的元素类型,并支持过滤掉 <code>nil</code>。</li>
<li>增加 <code>NSDictionary(QMUI)</code> 分类,提供 <code>qmui_mapWithBlock:</code> 方法用于转换字典里的 key-value 类型,提供 <code>qmui_deepMapWithBlock:</code> 方法用于深度拷贝的转换。</li>
<li>新增 hook 用于保护 <code>-[NSMutableAttributedString appendAttributedString:]</code> 遇到参数为 <code>nil</code> 时会命中系统 assert: nil argument 的情况。</li>
<li><code>UILabel(QMUI)</code> 增加 <code>qmui_centerOfCapHeight</code> 属性用于获取单行文本里 <code>font.capHeight</code> 的位置。</li>
<li><code>UINavigationController(QMUI)</code> 增加属性 <code>qmui_alwaysInvokeAppearanceMethods</code> 用于在 <code>UINavigationController</code> 不可视时进行 push/pop 依然能触发 vc 生命周期方法的方法。</li>
<li><code>UINavigationController(QMUI)</code> 增加属性 <code>qmui_lastOperation</code> 用于获取当前正在进行的切换界面动画类型(push 或 pop)。</li>
<li><code>UITextField(QMUI)</code> 增加属性 <code>qmui_respondsToDeleteActionAtLeading</code> 用于对齐 <code>UITextView</code> 的行为:在输入框开头继续按删除按钮也可以触发 shoudChange 的 delegate 方法。</li>
</ol>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li>配置表删除 <code>SendAnalyticsToQMUITeam</code>。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>如果你有使用配置表,请删除其中的 <code>SendAnalyticsToQMUITeam</code>。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1404766232" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1451" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1451/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1451">#1451</a> 对因为被 present 盖住的界面,修改 navigationBar 样式时的 assert 条件做优化。</li>
<li>修复 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1522874037" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1473" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1473/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1473">#1473</a> <code>UISearchController.searchBar</code> 作为 <code>UITableView.tableHeaderView</code> 时,进入搜索状态,搜索结果列表顶部有一大片空白的问题。</li>
<li>修复 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1746310987" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1498" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1498/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1498">#1498</a> 开启 <code>forceEnableInteractivePopGestureRecognizer</code> 的界面被 push 的过程中快速手势返回,容易导致 App 卡死的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1763101495" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1501" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1501/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1501">#1501</a> 修复 <code>AutomaticCustomNavigationBarTransitionStyle</code> 在 <code>setViewControllers:</code> 场景下的若干问题。</li>
<li>修复 <code>QMUIImagePickerViewController</code> 初始滚动位置可能错误的 bug。</li>
<li>修复 <code>QMUIAlertController</code> 以 <code>ActionSheet</code> 演示呈现较长内容时,顶部布局没考虑 <code>safeAreaInsets</code> 的问题。</li>
<li>修复 <code>QMUIBadge</code> 对纯文本的 <code>UIBarButtonItem</code> 基准布局错误的 bug。</li>
<li>修复 <code>QMUIButton</code> 在 <code>adjustsButtonWhenDisabled = NO</code> 时也会在 <code>setEnabled:YES</code> 里重置 <code>alpha</code> 的问题。</li>
<li>优化 <code>QMUINavigationButton</code> 自定义返回按钮点击区域太小的问题。</li>
<li>修复 <code>QMUIKeyboardManager</code> 在以 iPad“侧拉”模式打开的 App 中获取键盘可视高度错误的 bug,iPhone、iPad 全屏/分屏/台前调度,都没这个问题。</li>
<li>修复<code>QMUITheme</code> 在切换 theme 时错误地覆盖 <code>UITextView.textColor</code> 导致如果输入框内存在不同颜色的富文本时会颜色错误的 bug。</li>
<li>修复同一个对象对不同 window 分别调用 <code>qmui_addSizeObserverForWindow:</code>,最终其中某个 window size 发生变化时所有 block 都被触发的 bug。</li>
<li>解决在未使用配置表的情况下,QMUIAssert 应使自动变成 NSAssert 的问题。</li>
<li>修复 QMUI Demo 无法使用 XCTest 的问题。</li>
<li>修复 <code>UISearchBar(QMUI)</code> 快速在 show/hide left/right accessoryView 时容易出现状态错误的 bug。</li>
<li>修复 <code>UIView(QMUI).qmui_shouldShowDebugColor</code> 属性在开启又关闭后可能导致元素背景全黑的问题。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.6.3
2022-12-15T07:11:46Z
4.6.3
<h2>🎆🎉🧨🧧 2022→2023</h2>
<h2>Bugfix</h2>
<ol>
<li>修复 <code>QMUIThemeColor.CGColor</code> 内存泄漏的 bug。</li>
<li>修复 <code>QMUITextField</code>、<code>QMUITextView</code> 在某些情况下 shouldChangeCaractersInRange:replacementString:originalValue: 没被调用的 bug。</li>
<li>优化某些场景即便调用 <code>qmui_rotateToInterfaceOrientation</code> 依然无法触发屏幕方向旋转的问题。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.6.2
2022-12-14T22:08:03Z
4.6.2
<p>4.6.2</p>
kayo5994
tag:github.com,2008:Repository/76934279/4.6.1
2022-12-08T06:57:36Z
4.6.1 - 兼容 iOS 13-16
<h2>综述</h2>
<p>QMUI 4.6.1 版本主要是在 <a href="https://github.com/Tencent/QMUI_iOS/releases/tag/4.6.0">4.6.0</a> 的基础上把最低 iOS 支持版本从 11 提升到 13,以对齐微信。也正因此,很多仅对 iOS 11、12 写的代码也一并去除了(包括很多 hook),所以<strong>建议大部分项目都升级到 QMUI 4.6.1 以使用更精简的代码</strong>。</p>
<p>仍需支持 iOS 11、12 系统的项目,请使用 <a href="https://github.com/Tencent/QMUI_iOS/releases/tag/4.6.0">QMUI 4.6.0</a> 。</p>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li>删除常量 <code>QMUITableViewStyleInsetGrouped</code>。</li>
<li>删除 <code>UITableView (QMUI)</code> 的 <code>qmui_style</code> 属性。</li>
<li>删除宏 <code>QMUIStatusBarStyleDarkContent</code>。</li>
<li>删除 <code>QMUIHelper.statusBarStyleDarkContent</code> 方法。</li>
<li>删除 <code>UISearchBar (QMUI)</code> 的 <code>qmui_textField</code> 属性。</li>
<li>删除配置表里的 <code>ShouldFixTabBarTransitionBugInIPhoneX</code> 开关。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>全局搜索 <code>QMUITableViewStyleInsetGrouped</code>,将其替换为系统的 <code>UITableViewStyleInsetGrouped</code>。</li>
<li>全局搜索使用到 <code>UITableView.qmui_style</code> 的地方(包括 Xib 文件),将其替换为系统的 <code>UITableView.style</code> 属性。</li>
<li>全局搜索 <code>QMUIStatusBarStyleDarkContent</code>,将其替换为系统的 <code>UIStatusBarStyleDarkContent</code>。</li>
<li>全局搜索用到 <code>QMUIHelper.statusBarStyleDarkContent</code> 的地方,将其替换为系统的 <code>UIStatusBarStyleDarkContent</code>。</li>
<li>全局搜索用到 <code>UISearchBar.qmui_textField</code> 的地方,将其改为系统的 <code>UISearchBar.searchTextField</code>。</li>
<li>如果有使用配置表,请删除你配置表里的 <code>ShouldFixTabBarTransitionBugInIPhoneX</code>。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.6.0
2022-12-07T20:36:07Z
4.6.0 - 兼容 iOS 11-16
<h2>综述</h2>
<p>QMUI 4.6.0 版本主要内容是兼容 iOS 16 及 iPhone 14 等新设备,以屏幕旋转、键盘管理为主。其中屏幕旋转的使用方式可以查看 Wiki:<a href="https://github.com/Tencent/QMUI_iOS/wiki/%E9%80%82%E7%94%A8%E4%BA%8E-iOS-16-%E5%8F%8A%E4%BB%A5%E4%B8%8B%E7%89%88%E6%9C%AC%E7%9A%84%E5%B1%8F%E5%B9%95%E6%96%B9%E5%90%91%E6%8E%A7%E5%88%B6%E6%96%B9%E5%BC%8F">《适用于 iOS 16 及以下版本的屏幕方向控制方式》</a>。</p>
<h2>新增功能</h2>
<ol>
<li><code>QMUIPopupMenuView</code> 增加 <code>sectionSpacing</code> 属性用于控制 <code>section</code> 之间的间隙。</li>
<li><code>QMUIThemeColor</code>、<code>QMUIThemeImage</code>、<code>QMUIThemeVisualEffect</code> 均增加了 <code>name</code> 属性及对应的 init 方法,让业务可以用字符串来标记该动态对象。</li>
<li>增加 <code>NSShadow (QMU)</code> 分类提供一个便捷的 init 方法。</li>
<li><code>CALayer (QMUI)</code> 增加属性 <code>qmui_shadow</code> 支持用 <code>NSShadow</code> 对象来描述投影样式,从而可以一行代码完成投影的设置。</li>
<li><code>NSArray (QMUI)</code> 增加方法 <code>qmui_firstMatchWithBlock:</code> 用于过滤第一个符合 block 条件的元素。</li>
<li><code>UIBezierPath (QMUI)</code> 增加方法 <code>qmui_bezierPathWithMediaTimingFunction:</code> 支持将一个 <code>CAMediaTimingFunction</code> 转成一条宽高为 1 的贝塞尔曲线(可以理解为数据可视化)。</li>
<li><code>QMUICommonDefines.h</code> 增加 <code>IOS16_SDK_ALLOWED</code> 宏用来标志当前是否为 Xcode 14 编译环境。</li>
<li>增加 <code>[QMUIHelper screenSizeFor67InchAndiPhone14Later]</code> 方法、<code>[QMUIHelper is67InchScreenAndiPhone14Later]</code> 方法、<code>IS_67INCH_SCREEN_AND_IPHONE14</code> 宏用于标记当前设备是否为 iPhone 14 Pro Max 尺寸的屏幕。</li>
<li>增加 <code>[QMUIHelper statusBarHeightConstant]</code> 用于获取静态的状态栏高度。</li>
<li><code>-[QMUIHelper deviceName]</code>、<code>-[QMUIHelper deviceModel]</code> 增加新设备的信息。</li>
<li><code>-[QMUIHelper safeAreaInsetsForDeviceWithNotch]</code> 增加新设备的值。</li>
<li><code>UIViewController (QMUI_Interface)</code> 增加方法 <code>qmui_rotateToInterfaceOrientation:</code> 用于强制将当前界面旋转到某个指定方向。</li>
<li><code>UIViewController (QMUI_Interface)</code> 增加方法 <code>qmui_setNeedsUpdateOfSupportedInterfaceOrientations</code> 对应 iOS 16 系统的 <code>setNeedsUpdateOfSupportedInterfaceOrientations</code>,用于告诉系统当前希望刷新屏幕方向。</li>
<li><code>UITableViewCell (QMUI)</code> 增加属性 <code>qmui_configureReorderingStyleBlock</code> 支持修改 cell 在排序过程中的样式。</li>
</ol>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li><code>QMUIPopupContainerView</code> 将 <code>UIColor *shadowColor</code> 属性改为 <code>NSShadow *shadow</code> 以支持更完整的投影样式。</li>
<li><code>UISlider (QMUI)</code> 将 <code>qmui_thumbShadowColor</code>、<code>qmui_thumbShadowOffset</code>、<code>qmui_thumbShadowRadius</code> 删除,改为新增的 <code>qmui_thumbShadow</code> 属性。</li>
<li>使 <code>StatusBarHeightConstant</code> 能兼容 iOS 16、iPhone 14 Pro 灵动岛。</li>
<li>将 iPhone 14 Pro Max 加入到 <code>AS_65INCH_SCREEN</code> 宏内。</li>
<li>将 iPhone 14 Pro Max 加入到 <code>-[QMUIHelper isRegularScreen]</code> 内。</li>
<li>删除 <code>+[QMUIHelper rotateToDeviceOrientation:]</code> 方法。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>全局搜索使用到 <code>QMUIPopupContainerView.shadowColor</code> 的地方,将其改为新的 <code>shadow</code> 属性。</li>
<li>全局搜索使用到 <code>UISlider.qmui_thumbShadowColor</code>、<code>UISlider.qmui_thumbShadowOffset</code>、<code>UISlider.qmui_thumbShadowRadius</code> 的地方,将其替换为新的 <code>qmui_thumbShadow</code> 属性。</li>
<li>全局搜索用到 <code>StatusBarHeightConstant</code> 的地方,分别测试其在 iPhone 13 和 iPhone 14 Pro 下的布局是否正确。</li>
<li>全局搜素用到 <code>AS_65INCH_SCREEN</code> 的地方,测试其在 iPhone 14 Pro Max 下的布局是否正确。</li>
<li>全局搜索用到 <code>-[QMUIHelper isRegularScreen]</code> 的地方,测试其在 iPhone 14 Pro Max 下表现是否正确。</li>
<li>全局搜索使用到 <code>+[QMUIHelper rotateToDeviceOrientation:]</code> 的地方,将其换成 <code>-[UIViewController qmui_rotateToInterfaceOrientation:]</code>。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1367045267" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1437" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1437/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1437">#1437</a> 修复在 iOS 15 里打开一个默认隐藏导航栏的界面,返回按钮样式错误的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1375577370" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1438" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1438/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1438">#1438</a> 修复 <code>QMUIPopupContainerView</code> 将 <code>sourceView</code> 设置为 <code>nil</code> 时 crash 的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1375584768" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1439" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1439/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1439">#1439</a> <code>UIView.qmui_hitTestBlock</code> 的返回值应该添加 <code>_Nullable</code> 以对齐系统。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1381757193" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1447" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1447/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1447">#1447</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1401887213" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1450" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1450/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1450">#1450</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1416004581" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1453" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1453/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1453">#1453</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1434352749" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1458" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1458/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1458">#1458</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1449073361" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1460" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1460/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1460">#1460</a> 解决 iOS 16 下 <code>QMUIKeyboardManager</code> 的各种 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1393212372" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1449" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1449/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1449">#1449</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1460538272" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1463" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1463/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1463">#1463</a> 修复将 <code>UIView.backgroundColor</code> 设置为 <code>QMUIThemeColor</code> 后再设置为另一个与 <code>QMUIThemeColor</code> 当前色值相同的颜色时,后者无效的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1404766232" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1451" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1451/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1451">#1451</a> 修复在尚未添加到 window 的 <code>UINavigationController</code> 里修改 <code>navigationBar</code> 可能会导致 <code>navigationBar</code> 样式错误的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1406894599" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1452" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1452/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1452">#1452</a> 修复开启系统辅助功能粗体文本的情况下,设置了 <code>tintColorAdjustsTitleAndImage</code> 的 <code>QMUIButton</code> 在 App 切到桌面再切回来时颜色错误的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1431800965" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1457" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1457/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1457">#1457</a> 修复 Xcode 14 编译的 App 在 iOS 16.0 上可能存在顶部标题布局错乱的 bug。</li>
<li>修复 <code>QMUINavigationTitleView.subAccessoryView</code> 在计算布局时如果 <code>subAccessoryView</code> 带有 <code>transform</code> 则布局错误的 bug。</li>
<li>修复 <code>QMUIPopupContainerView</code> 在 <code>sourceView</code>、<code>sourceBarItem</code> 的值更新时没有清除与旧值的绑定关系的 bug。</li>
<li>修复 <code>QMUIPopupContainerView</code> 计算宽高可能不准确的 bug:应该取 px 整数而不是 pt 整数。</li>
<li>修复 <code>QMUIPopupMenuButtonItem</code> 里强制修改 <code>button.contentEdgeInsets.top/bottom</code> 为 0 的 bug。</li>
<li>修复 iOS 16 里 <code>QMUITextView</code> 文本颜色设置为 <code>QMUIThemeColor</code> 后无法响应 theme 变化的 bug。</li>
<li>修复 <code>-[QMUIHelper keyboardHeightWithNotification:inView:]</code> 在 iOS 16 台前调度下无法返回正确值的 bug。</li>
<li>修复 <code>UITableViewCell(QMUI).qmui_selectedBackgroundColor</code> 有时候失效的 bug。</li>
</ol>
<h2>其他</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1167760872" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1378" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1378/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1378">#1378</a> 支持 Mac Catalyst 编译。</li>
<li>由于 iOS 16 对横竖屏体验的优化,所以配置表里的 <code>AutomaticallyRotateDeviceOrientation</code> 在 iOS 16 下已经不需要了,请业务项目知悉即可。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.5.1
2022-08-23T09:45:06Z
4.5.1
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li><code>NSObject (QMUI).qmui_ivarList</code> 输出的内容里,为每个 Ivar 开头增加了 offset 值的展示,同时显示十进制和十六进制的值,中间用“|”隔开。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>全局搜索“qmui_ivarList”,检查使用到的地方是否有影响。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1336817952" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1432" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1432/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1432">#1432</a> 修复开启 <code>AutomaticCustomNavigationBarTransitionStyle</code> 的情况下,从界面 B pop 回界面 A 的过程,如果 A 的导航栏效果与全局默认效果不同,则在 pop 过程中 A 的导航栏样式错误的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1346753455" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1434" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1434/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1434">#1434</a> 修复 <code>qmui_outsideEdge</code> 在不可见的 view 上生效的 bug。</li>
<li>修复 <code>QMUIAlertController</code> 在 alert、actionSheet 两种 style 下,如果不存在 title、message、customView 时,第一个 action 的顶部依然错误出现分隔线的 bug。</li>
<li>修复 <code>UIScrollView (QMUI).qmui_alreadyAtTop</code> 可能因为浮点精度问题导致返回值错误的 bug。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.5.0
2022-08-11T11:05:01Z
4.5.0
<h2>新增功能</h2>
<ol>
<li>增加 <code>QMUIBarProtocol</code> 用于同时约定 <code>UINavigationBar</code>、<code>UITabBar</code> 的功能接口,因为这两种 bar 所需要的功能基本都一样,用 protocol 来约定也便于后续同步调整这两种 bar 的功能。同时也因此使得 <code>UINavigationBar (QMUI)</code> 新增了 <code>qmui_effectView</code>、<code>qmui_effectViews</code>、<code>qmui_effect</code>、<code>qmui_effectForegroundColor</code> 几个与磨砂相关的接口。</li>
<li>由于 <code>QMUIBarProtocol</code> 为 <code>UINavigationBar</code> 带来更多的能力,所以这个版本我们优化了 <code>QMUISmoothEffect</code>、<code>AutomaticCustomNavigationBarTransitionStyle</code> 里与磨砂相关的表现,使其更符合组件预期。</li>
<li>增加 <code>UIView (QMUINavigationTitleView).qmui_useAsNavigationTitleView</code> 属性用于标记某个 view 为自定义的导航栏 titleView,以便 QMUI 自动帮你处理一些布局上的系统 bug。</li>
<li><code>QMUIPopupMenuView</code> 增加 <code>willHandleButtonItemEventBlock</code> 属性便于统一管理 item 的点击行为。</li>
<li><code>CALayer (QMUI)</code> 增加 <code>qmui_layerWithName:</code> 方法用于便捷查找指定 name 的 layer。</li>
<li><code>UIActivityIndicator(QMUI)</code> 支持用 <code>qmui_size</code> 指定大小。</li>
</ol>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li>由于 <code>QMUIBarProtocol</code> 的调整,我们同时删除了 <code>UINavigationBar (QMUI).qmui_backgroundContentView</code> 属性。</li>
<li><code>UISearchController.dimsBackgroundDuringPresentation</code> 默认值在 iOS 15 下被改为 NO 了,为了保持与旧版本的一致,<code>QMUISearchController</code> 里将其改为 YES。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1329844917" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1425" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1425/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1425">#1425</a> <code>QMUICommonTableViewController</code> 内自带的 <code>QMUISearchController</code> 的搜索结果列表的 <code>UITableViewStyle</code> 从 Plain 改为与当前宿主 vc 的 tableView.style 一致。</li>
<li>将 QMUIStringPrivate <code>qmui_substringFromIndex</code> 的参数 index 等于字符串长度时返回的值从 nil 改为 @"",以保持与系统方法一致。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>如果仍需要 <code>UINavigationBar (QMUI).qmui_backgroundContentView</code> 属性,请将 QMUIKit 旧代码抄到业务项目里。</li>
<li>检查 iOS 15 里用到 <code>QMUISearchController</code> 的地方,检查进入搜索状态时界面表现是否符合预期。</li>
<li>简单检查用到 <code>QMUICommonTableViewController</code>、带有搜索功能,且 style 不为 <code>UITableViewStylePlain</code> 的列表,其搜索结果的 tableViewStyle 是否符合预期。</li>
<li>请检查用到 <code>qmui_substringFromIndex</code> 的地方,在 index 等于 string.length 时表现是否正常。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li>修复 <code>QMUIAlertController</code> 以 alert 形式显示时,如果内容特别多,浮层会溢出到屏幕的 safeAreaInsets 区域的问题。</li>
<li>修复 <code>QMUIConsole.canShow = NO</code> 时依然会创建相关的 view、viewController 对象的问题。</li>
<li>修复 iOS 15.4 启动 App 后到系统设置-辅助功能-显示与文字大小-修改一下“按钮形状”的开关,会 crash:<code>-[UILabel _accessibilityButtonShapesChangedNotification:]: message sent to deallocated instance 0x17e751d60</code> 的问题。</li>
<li>修复 <code>QMUIMultipleDelegates</code> 在 iOS 16 下配合 <code>UIScrollView</code> 可能引发 crash 的问题。</li>
<li>修复 <code>QMUINavigationTitleView.needsLoadingPlaceholderSpace = NO</code> 时即便不显示 loading,loading 也会占位,导致文字偏右的问题。</li>
<li>修复 <code>QMUITextView</code> 文字换行时丢失系统滚动动画特效的 bug。</li>
<li>修复 <code>- [QMUITextView setFrame:]</code> 被调用时即便 size 没变化也会触发 <code>setContentOffset:</code> 产生滚动的问题。</li>
<li>修复配置表的值发生变化时重新应用的时候,对于业务 App 使用自定义 container viewController 的场景,无法正确刷新它的 navigationBar、tabBar 样式的 bug。</li>
<li>修复 <code>+[QMUIHelper applicationSize]</code> 在 MacCatalyst App / M1 上返回了 <code>CGSizeZero</code> 导致 <code>APPLICATION_WIDTH</code>、<code>APPLICATION_HEIGHT</code> 的值为 0 的 bug。</li>
<li>修复在 root controller 实现了 <code>preferredStatusBarStyle</code> 方法并且在其中调用 <code>childViewControllerForStatusBarStyle</code> 方法的情况下,iOS 12 present 起 <code>AVPlayerViewController</code> 在 dismiss 时会触发 <code>preferredStatusBarStyle</code> 导致死循环的 bug:因为 <code>AVPlayerViewController</code> 内部的 <code>preferredStatusBarStyle</code> 会转向 <code>presentingViewController</code> 的 <code>preferredStatusBarStyle</code>,而后者又会 <code>return AVPlayerViewController</code>,于是死循环。</li>
<li>修复 <code>qmui_substringAvoidBreakingUpCharacterSequences</code> 系列方法在遇到 length 为1、range 与 string 相等的情况时会 crash 的 bug。</li>
<li>修复 <code>QMUIStringPrivate</code> 里的 assert 条件与系统方法不匹配的问题。</li>
<li>修复 <code>substring:avoidBreakingUpCharacterSequencesWithRange:lessValue:countingNonASCIICharacterAsTwo:</code> 在接受的 range 头尾都刚好落在一个 emoji 的中间时会得到一个负值 range 并引起 crash 的 bug,同时对负值 range 做 QMUIAssert 的提醒但不干预其返回值。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="900329994" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1248" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1248/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1248">#1248</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="951240706" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1274" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1274/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1274">#1274</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1167194470" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1377" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1377/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1377">#1377</a> 修复 <code>QMUIConsole</code> 在没使用配置表或者配置表里没设置 <code>TableViewCellBackgroundColor</code> 的情况下,打印出来的日志背景是白色的,看不见文字的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1058260482" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1326" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1326/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1326">#1326</a> 调整 <code>StatusBarHeightConstant</code> 的值,使其在 statusBarHidden 时,iOS 14 下返回44,iOS 15 返回50,保持与系统 <code>UIApplication.statusBarFrame.size.height</code> 一致。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1205296294" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1391" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1391/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1391">#1391</a> 修复 <code>NSURL (QMUI).qmui_queryItems</code> item 类型错误的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1245062090" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1404" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1404/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1404">#1404</a> 修复 <code>QMUITextView</code> 当文本较多,在真机上长按系统输入法的删除按钮达到快速删除模式时,输入框底部容易出现大段空白的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1276835820" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1411" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1411/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1411">#1411</a> 修复 <code>UITableView.delegate</code> 开启了 <code>qmui_multipleDelegatesEnabled</code> 后在 dealloc 时可能引发 crash 的问题。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1281494522" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1413" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1413/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1413">#1413</a> 修复 <code>UISlider(QMUI)</code> 先设置 <code>qmui_step</code> 再设置 <code>qmui_stepDidChangeBlock</code> 后某些情况下首次点击无法触发 block 的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1294939427" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1418" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1418/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1418">#1418</a> 修复 <code>UIImageView</code>、<code>UIButton</code> 配合 template image 使用时无法通过 <code>tintColor</code> 来修改图片颜色的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1284292602" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1415" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1415/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1415">#1415</a> 修复 <code>QMUINavigationTitleView</code> 先设置 <code>needsLoadingView = YES</code> 再修改 <code>loadingViewSize</code> 会导致文字无法完整显示的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1310353371" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1421" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1421/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1421">#1421</a> 修复 <code>QMUILabel.truncatingTailView</code> 在 label.text 为空时 crash 的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1334371535" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1427" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1427/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1427">#1427</a> 修复 QMUI 里 <code>UITableView</code> 先 <code>setDelegate:</code> 再 <code>setDataSource:</code> 可能引发 crash 的问题。</li>
</ol>
<h2>其他</h2>
<ol>
<li>将 <code>QMUIConsole</code> 专属的 window 类型从 <code>UIWindow</code> 改为 <code>QMUIConsoleWindow</code>,使其更容易与其他 window 区分开(例如在 Lookin 里查看结构时)。</li>
<li><code>- [NSString (QMUI) qmui_trim]</code> 默认去掉 C 里的字符串结束符“\0”。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.4.3
2021-12-31T10:44:26Z
4.4.3
<ol>
<li><code>UISlider (QMUI)</code> 增加 <code>qmui_stepDidChangeBlock</code> 以更便捷的方式监听 step 的变化,同时修复之前用 value changed 监听可能不准确的 bug。</li>
<li>优化 UIImage (QMUI) 里与 QMUITheme 相关的一些报错的判断方式,之前的写法会导致“对一个 QMUIThemeImage 调用 qmui_imageWithTintColor: 会误判”的问题。</li>
<li>优化 QMUIStringPrivate 里对 substrings 系列方法的报错,将其从 NSAssert 改为 QMUIAssert,这样业务如果不太关注的话,可以以 log 的形式输出,而不会中断 Debug。</li>
<li>优化 <code>-[NSString (QMUI) qmui_capitalizedString</code> 的实现,如果字符串以 Emoji 开头,就不应该尝试转为大写了。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1090368993" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1358" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1358/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1358">#1358</a> 修复 <code>UITabBar (QMUI).qmui_effectViews</code> 在 iOS 12 及以下会 crash 的 bug。</li>
</ol>
MoLice
tag:github.com,2008:Repository/76934279/4.4.2
2021-12-23T08:45:49Z
4.4.2
<h2>新增功能</h2>
<ol>
<li><code>QMUIStringPrivate</code> 增加对 <code>NSString</code> substring 系列接口的异常情况的保护,方便自动发现类似裁剪字符串时不小心把 emoji 从中间裁剪的场景,避免出现乱码、crash。</li>
<li><code>NSObject (QMUI)</code> 增加 <code>qmui_viewInfo</code> 属性用于 Debug 时方便地输出某个 view 的 view 层级结构。</li>
</ol>
<h2>会带来 QMUI 新旧版本兼容问题的更新</h2>
<ol>
<li>为了修复 <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1083782665" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1351" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1351/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1351">#1351</a> 的 bug,我们修改了 <code>QMUINavigationBarScrollingAnimator</code> 自动获取 <code>UINavigationBar</code> 的逻辑,旧版本是通过 <code>QMUIHelper.visibleViewController.navigationController.navigationBar</code> 来获取,新版本改为通过绑定的 scrollView 一层一层往上找,找到所在的 viewController 的导航栏。所以如果业务项目以前存在“scrollView 所在的 viewController,和 scrollView 控制的 navigationBar 不处于同一个 UINavigationController” 里时,则更新 QMUI 版本后 animator 会失效。大部分情况下业务项目应该不会存在这种场景。</li>
</ol>
<h2>如何适配新版</h2>
<ol>
<li>检查业务项目里使用了 <code>QMUINavigationBarScrollingAnimator</code>、<code>QMUINavigationBarScrollingSnapAnimator</code> 的地方,效果是否与 4.4.1 一致。</li>
</ol>
<h2>Bugfix</h2>
<ol>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1068048579" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1330" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1330/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1330">#1330</a> <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1080759947" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1346" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1346/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1346">#1346</a> 修复 <code>NavBarRemoveBackgroundEffectAutomatically</code> 在开启了 <code>AutomaticCustomNavigationBarTransitionStyle</code> 时可能对假 bar 无效的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1083782665" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1351" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1351/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1351">#1351</a> 修复 <code>QMUINavigationBarScrollingAnimator</code> 在 scrollView 所在的 viewController 已经被推出 <code>UINavigationController</code> 时,滚动器依然能对 UINavigationBar 产生影响的 bug。</li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1085516436" data-permission-text="Title is private" data-url="https://github.com/Tencent/QMUI_iOS/issues/1352" data-hovercard-type="issue" data-hovercard-url="/Tencent/QMUI_iOS/issues/1352/hovercard" href="https://github.com/Tencent/QMUI_iOS/issues/1352">#1352</a> 修复 <code>QMUIButton</code> 开启了 <code>adjustsImageTintColorAutomatically</code> 后修改 normal 的 image,highlighted、disabled 的 image 无法同步更新的 bug。</li>
<li>修复 <code>QMUIModalPresentationAnimationStylePopup</code> 的 hide 动画无法看到缩小过程的 bug。</li>
</ol>
<h2><a href="https://github.com/QMUI/QMUIDemo_iOS">QMUI Demo</a></h2>
<ol>
<li>修复 <code>QMUISmoothEffect</code> 在转场过程中修改 effect 可能出现的 crash。</li>
</ol>
MoLice