Skip to content

Releases: Tencent/QMUI_iOS

3.1.5

19 Apr 12:20
Compare
Choose a tag to compare

新增功能

  1. UITableView (QMUI) 增加 qmui_performBatchUpdates:completion: 以支持 iOS 9-10 的使用。

Bugfix

  1. #554 by @caoer 修改 UIColor (QMUI) 若干错误的 nullable 标记。
  2. #557 修复 QMUITextView 在设置了带小数点的 frame 后可能在右边出现一条黑色边框的 bug。
  3. #558 修复 QMUICommonTableViewController 对于 tableView.allowsMultipleSelection = YES 的场景仍然会在 viewWillAppear: 时清空选中的 cell 的错误行为。
  4. #562 修复 UILabel (QMUI) 在未使用 qmui_textAttributesqmui_lineHeight 的情况下仍会额外处理 setAttributedText:,导致可能产生性能问题的 bug。
  5. 修复 UIViewController (QMUI).qmui_navigationBarMaxYInViewCoordinator 在前后两个界面对 navigationBar 显隐设置不相同的情况下,手势返回过程中可能出现计算错误的 bug,另外在 QMUI Demo 中也新增了示例界面,具体请看 QMUIKit→QMUINavigationController→获取导航栏的正确布局位置。

3.1.4

08 Apr 11:58
Compare
Choose a tag to compare
  1. #545 #551 为所有文件补充完整的 nullable/nonull。
  2. #549 修复手势返回过程中 qmui_navigationBarMaxYInViewCoordinator 返回 0 的 bug。

3.1.3

02 Apr 15:25
Compare
Choose a tag to compare

新增功能

  1. UIScrollView (QMUI) 增加 qmui_setContentInset:animated: 支持以动画形式修改 contentInset
  2. QMUIHelper 增加 +isZoomedMode 方法用于判断当前设备是否处于放大模式下。
  3. UITableViewCell (QMUI) 增加 qmui_setHighlightedBlockqmui_setSelectedBlock

Bugfix

  1. #509 修复 UIImageView 开启了 qmui_smoothAnimation 后,sizeToFit 得到 CGSizeZero 的错误大小的 bug。
  2. #512 by @ziezheng 修复当使用 qmui_usedAsTableHeaderView 的模式下,UISearchBar 从 active 回到非 active 状态过程中会出现抖动的系统 bug。
  3. #512 by @ziezheng 修复手势返回过程中导航栏按钮动画错误的 bug。
  4. #524 修复 QMUIImagePickerViewController 在 iPhone X 上布局可能错误,导致无法被设置为2列的 bug。
  5. #529 修复 QMUILabel 使用了 contentEdgeInsets 后在某些情况下文字偏上的 bug。
  6. #530 修复用于区分放大模式的宏 IS_ZOOMEDMODE 在 iPhone Plus 系列设备下不准确的 bug。
  7. #535 修复 QMUIRuntime.h 被 import 到 MRC 的文件中时会导致编译失败的 bug。
  8. 修复 UIBarItem (QMUI) 在调用 qmui_viewLayoutDidChangeBlock 时可能产生的野指针 crash。
  9. 修复 QMUIBadge 同时存在 badgeString 和 badgeInteger 的情况下,未读数字没有盖在红点上的 bug。

3.1.2

19 Feb 13:08
Compare
Choose a tag to compare

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

  1. UITableView+QMUICellHeightKeyCache 提供的高度缓存功能,当某个 key 的高度已经计算完成后,现在会在 tableView:estimatedHeightForRowAtIndexPath: 里返回已经计算过的结果,从而达到更精准的滚动的目的。同时,对应的 Demo QDCellHeightKeyCacheViewController.m 也进行了更新。

如何适配新版

  1. 全局搜索 qmui_cacheCellHeightByKeyAutomatically = YES,查看开启自动缓存的列表,是否有重写 tableView:estimatedHeightForRowAtIndexPath: 方法,如果有,需注意这个方法如今只会在该 indexPath 对应的 key 的高度尚未被计算出来时才会被调用,一旦该 key 已经有了高度,则下次都会直接从缓存里读取高度,而不会触发 tableView:estimatedHeightForRowAtIndexPath:,请审视该方法里的业务代码是否会受本次变动的影响。

Bugfix

  1. #493 修复以 QMUINavigationButtoncustomViewUIBarButtonItem 无法正确布局 badge 的 bug。
  2. #495 修复作为 UINavigationController.rootViewControllerQMUICommonViewControllerviewDidLoad 时通过 becomeFirstResponder 升起键盘后,shouldHideKeyboardWhenTouchInView: 无效的 bug。
  3. #497 修复 QMUIDialogSelectionViewController.selectedItemIndexes 默认值失效的 bug。
  4. #499 修复 iOS 9 下 QMUICollectionViewPagingLayout 滚动越出边界后松手,无法自动滚回正确位置的 bug。
  5. #502 修复 iOS 9 下弹出 UIAlertController 会死循环的 bug。
  6. #506 修复 QMUINavigationTitleView 不支持 contentVerticalAlignment 切换的 bug。
  7. 修复 UIBarItem (QMUI) 内使用 qmui_layoutSubviewsBlock 不当导致可能产生的野指针 crash。
  8. 修复 UITableView+QMUICellHeightKeyCache qmui_invalidateCellHeightCachedForKey: 方法无效的 bug。

3.1.1

24 Jan 10:49
Compare
Choose a tag to compare

Bugfix

  1. Fixed #482 修复 [QMUIHelper isNotchedScreen] 在某些场景下可能判断错误的 bug。
  2. Fixed #485 修复使用 QMUIAsset requestThumbnailImageWithSize: 获取缩略图可能会失败的 bug。
  3. Fixed #488 修复 QMUIPopupContainerViewsourceView 重复设置时,qmui_frameDidChangeBlock 无法被更新的 bug。
  4. Fixed #489 修复 QMUIDialogTextFieldViewController.textFieldTitleLabels 返回了错误的数组的 bug。
  5. Fixed #491 修复没开启 ShouldPrintQMUIWarnLogToConsole 的情况下,QMUIWarn 无法将 log 打印到 Xcode 控制台的 bug。

3.1.0

19 Jan 12:30
Compare
Choose a tag to compare

新增功能

  1. UIBarItem (QMUI) 增加 qmui_viewDidSetBlockqmui_viewDidLayoutSubviewsBlockqmui_viewLayoutDidChangeBlock 用于操作内部的 view,从而解决系统的 UIBarButtonItem 内的 view 延迟加载引发的系列问题。

    这3个新接口也被用于 QMUIBadgeQMUIPopupContainerView 组件内。

  2. NSArray (QMUI) 增加 qmui_arrayWithObjects: 用于将多个数组或对象合并成一个新数组。

  3. UIView (QMUI) 增加 qmui_layoutSubviewsBlock 用于方便地重写 layoutSubviews

  4. UIView (QMUI) 增加 qmui_ 系列的 convertRect/convertPoint 方法用于在两个不同 UIWindow 内的 view 之间进行坐标转换,系统的方法限制了两个 view 必须从属于同一个 UIWindow。由于该方法对从属同一个 UIWindow 的 view 之间的转换也不会产生多少额外的操作,可随意使用,无需担心性能。

  5. UITextView (QMUI) 增加 qmui_convertUITextRangeFromNSRange: 用于将一个 NSRange 转换成 UITextRange 对象。

  6. UITextView (QMUI) 增加 qmui_scrollRangeToVisible: 支持滚动到指定 range 可见的区域。

  7. 增加 QMUISynthesize 系列宏用于方便地为 Category 里增加的 property 实现 getter/setter 方法,示例代码如下:

    @interface NSObject (CategoryName)
    
    @property(nonatomic, strong) type *strongObj;
    @property(nonatomic, weak) type *weakObj;
    @property(nonatomic, assign) CGRect rectValue;
    @end
    
    @implementation NSObject (CategoryName)
    
    // 省去手动写6个 getter/setter 方法,但目前暂不支持在 getter/setter 内增加自定义的逻辑
    QMUISynthesizeIdStrongProperty(strongObj, setStrongObj)
    QMUISynthesizeIdWeakProperty(weakObj, setWeakObj)
    QMUISynthesizeCGRectProperty(rectValue, setRectValue)
    
    @end
  8. 增加 QMUIConsole 组件用于在屏幕上直接打印 log,支持搜索,支持按 Level、Name 过滤 log。同时配置表增加开关 ShouldPrintQMUIWarnLogToConsole 支持自动将 QMUILogWarn() 的提示直接显示到屏幕上(默认关闭)。QMUI 的组件以后将会用 QMUILogWarn() 来提醒一些重要信息但又不适合用 NSAssert 打断进程的场景,从而解决类似 #421-comment 的问题。

    对应地,QMUI Demo 里也增加了相应的展示界面:Components → QMUIConsole。console

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

  1. QMUIPopupContainerView 废弃 layoutWithTargetView:layoutWithTargetRectInScreenCoordinate:,改为通过指定 sourceBarItem/sourceView/sourceRect 的方式布局,从而保证目标源的布局发生变化时 popup 也能自动更新布局(以前的版本,当目标源的布局发生变化时要手动更新 popup 的布局,所以总是需要为横竖屏、iPad 分屏等情况写一堆适配)。这个改动也得益于新的 UIBarItem (QMUI) 组件。popup
  2. UIWindow (QMUI)qmui_capturesStatusBarAppearance 属性在这个版本更换了实现方式,现已支持所有 iOS 版本(以前仅支持 iOS 10 及以后)。
  3. 优化 QMUICellHeightCache 的实现,使其在 UITableView/UICollectionView 的大小发生变化时自动刷新高度缓存,无需手动管理。
  4. UITableView/UICollectionView 增加属性 qmui_invalidateIndexPathHeightCachedAutomatically 用于控制由 QMUICellHeightIndexPathCache 维护的高度缓存是否应该在适当的时机自动刷新,同时废弃 QMUICellHeightIndexPathCache 里的属性 automaticallyInvalidateEnabled
  5. UITableView/UICollectionView 增加 qmui_invalidateAllHeightqmui_invalidateHeightForKey:qmui_invalidateHeightAtIndexPath: 方法用于刷新列表里由 QMUICellHeightCache 维护的缓存,以前刷新的方式是拿到 UITableView/UICollectionView 当前的缓存容器,再调用缓存容器自己的 invalidate 方法,但由于现在一个列表可能存在多个缓存容器(分别对应不同的列表 bounds 大小),每次刷新都应该同时刷新所有缓存容器的缓存,所以才增加这系列方法。
  6. 同样的,QMUICellHeightKeyCache 组件也为 UITableView 增加 qmui_invalidateCellHeightCachedForKey: 方法用于刷新某个 key 的缓存,请注意区分两个不同的 cache 组件名。
  7. 以前的版本,UINavigationController+NavigationBarTransition 内在切换界面时对于隐藏了导航栏的界面将不会设置该界面的导航栏样式,可能导致后续该界面把导航栏重新显示出来时会得到错误的样式。新版本去掉了这个限制,并且对开启了 AutomaticCustomNavigationBarTransitionStyle 的情况,会为导航栏显隐状态不一致的两个界面开启假 bar 的转场效果。

如何适配新版

  1. 全局搜索用到 QMUIPopupContainerViewQMUIPopupMenuView 的地方,将其改为新的用法。新用法请阅读 QMUIPopupContainerView.h 或参考 Demo 里的 QDPopupContainerViewController
  2. 全局搜索用到 qmui_capturesStatusBarAppearance 的地方,如果以前有加上 iOS 版本 >= 10.0 的判断,那么现在可以去掉了。
  3. 全局搜索 “automaticallyInvalidateEnabled”,将其替换为对应的 UITableView/UICollectionView 实例的 qmui_invalidateIndexPathHeightCachedAutomatically 属性。
  4. 全局搜索“qmui_keyedHeightCache invalidate”,将该处代码改为对应的 UITableView/UICollectionView 实例的 qmui_invalidateHeightForKey:qmui_invalidateAllHeight 方法。
  5. 全局搜索“qmui_indexPathHeightCache invalidate”,将该处代码改为对应的 UITableView/UICollectionView 实例的 qmui_invalidateHeightAtIndexPath:qmui_invalidateAllHeight 方法。
  6. 全局搜索“qmui_currentCellHeightKeyCache invalidate”,将该处代码改为对应的 UITableView 实例的 qmui_invalidateCellHeightCachedForKey:qmui_invalidateAllCellHeightKeyCache 方法。
  7. 检查项目中通过 preferredNavigationBarHidden 默认隐藏导航栏的界面与其他界面之前互相 push/pop 时导航栏效果是否正确。
  8. 如果有使用配置表,请将以下代码复制到项目的配置表中,并改为你希望的值:
    QMUICMI.shouldPrintQMUIWarnLogToConsole = NO; // ShouldPrintQMUIWarnLogToConsole : 是否在出现 QMUILogWarn 时自动把这些 log 以 QMUIConsole 的方式显示到设备屏幕上
  9. 如果有使用配置表,请删掉配置表里的开关 ShouldAssertResizableImageCapInsetsError,现在改为用 ShouldPrintQMUIWarnLogToConsole 代替了。

Bugfix

  1. Fixed #471 修复 iOS 10 上切换输入法可能产生的死循环。
  2. Fixed #471-comment 修复一个 UIWindow 的 property 如果使用懒加载会导致死循环的 bug。
  3. Fixed #476 修复 iOS 10 下带输入框的 QMUIModalPresentationViewController 显示出来时无法感知到键盘的高度,导致浮层布局错误的 bug。
  4. Fixed #479 修复系统 bug:当 UISearchController push 进隐藏导航栏的界面,会强制把导航栏显示出来。注意该修复仅对 QMUICommonViewControllerQMUICommonTableViewController 有效。
  5. 修复 QMUISearchController 在搜索状态下 push 到另一个界面再返回,再退出搜索,当前界面的导航栏样式会变成刚刚那个界面的样式的 bug。
  6. 修复 QMUIMarqueeLabel 在 xib 内设置 text 不生效的问题。
  7. 修复 QMUICollectionViewPagingLayout 对列表结尾的滚动判断错误导致最后一页无法准确停靠的 bug。
  8. 修复 QMUIButton 开启了 adjustsImageTintColorAutomatically 后,如果只设置除了 UIControlStateNormal 外的其他状态的图片,则会导致处于 UIControlStateNormal 状态时按钮图片黑色的 bug。

其他

  1. 优化 NSAttributedStringKey 类型声明,以前很多地方都写成了 NSString *

3.0.0

28 Dec 18:19
Compare
Choose a tag to compare

从 3.0.0 开始,QMUI 支持的最低版本改为 9.0,因此更新 3.0.0 之前请先检查业务项目的版本支持情况。若项目仍需支持 iOS 8,但又希望带上 3.0.0 版本内的 bug 修复代码,则可自行查阅以下文件的 commit(其他文件可无视),手工将代码更新到项目。代码变更量不多。

  1. QMUIAsset.m
  2. QMUIHelper.m
  3. UITableView+QMUI.m
  4. QMUIZoomImageView.m
  5. QMUICollectionViewPagingLayout.m

新增功能

  1. UIView (QMUI) 增加 qmui_frameWillChangeBlockqmui_frameDidChangeBlock 便于监听 frame 的变化。
  2. 由于不需要兼容 iOS 8,因此 QMUIKeyboardManager 加回对 iPad 浮动键盘的支持。
  3. QMUICollectionViewPagingLayout 增加属性 pagingThreshold 用于控制触发翻页的临界点。
  4. 我们观察到在 12.1.1 后已被系统修复的 UITabBar bug #410 在某些小众场景下依然存在问题,但由于出现的条件尚不明确,因此我们在配置表新增开关 ShouldFixTabBarButtonBugForAll 允许对应的修复代码在 iOS 12.1.1 之后依然能生效,但开关默认为 NO,也即仅在 iOS 12.1.0 才生效,需要的项目请自行打开。

如何适配新版

  1. 如果有使用配置表,请将以下代码增加到配置表内,并改为所需的值。
    QMUICMI.shouldFixTabBarButtonBugForAll = NO; // ShouldFixTabBarButtonBugForAll : 是否要对 iOS 12.1.1 及以后的版本也修复手势返回时 tabBarButton 布局错误的 bug(issue #410),默认为 NO

Bugfix

  1. Fixed #376 by @passerbyloo 修复 QMUIAsset 在读取大图时出现内存泄露的 bug,PR #468 #470
  2. Fixed #463 #467 修复 [QMUIHelper isNotchedScreen] 判断错误的 bug。
  3. Fixed #466 by @wbcyclist 修复 [UITableView (QMUI) qmui_scrollToRowAtIndexPath:atScrollPosition:animated:] 内对于 section 合法而 row 为 NSNotFound 的 indexPath 会误报为非法 indexPath 的 bug。
  4. Fixed #472 修复 QMUIZoomImageView 在播放视频后实例销毁时会产生的 crash。
  5. 修复 QMUICollectionViewPagingLayoutscrollDirectionUICollectionViewScrollDirectionVertical 时滚动不准确的 bug。

其他

  1. 优化项目内一些 enum 的定义写法,以更好地兼容 Swift。

2.9.3

21 Dec 07:25
Compare
Choose a tag to compare

新增功能

  1. 增加 NSObject (QMUI_DataBind) 用于临时给 NSObject 添加一些信息,省去自定义 class 或者增加 property 的成本。
  2. UIViewController (QMUI) 增加 qmui_visibleState 用于获取当前 viewController 所处的生命周期阶段。
  3. UIViewController (QMUI) 增加 qmui_visibleStateDidChangeBlock 用于监听 qmui_visibleState 变化。
  4. UIViewController (QMUI) 增加 qmui_prefersStatusBarHiddenqmui_preferredStatusBarStyle 用于获取真正的状态栏信息,如果仅使用系统的这两个方法需要额外处理 childViewController 的场景。
  5. UIView (QMUI) 增加 qmui_isControllerRootView 用于判断当前 view 是否为某个 viewController 的 view。
  6. UIView (QMUI) 增加 qmui_viewController 用于获取当前 view 所在的 viewController。
  7. UIView (QMUI) 增加 qmui_visible 用于判断该 view 是否处于 window 层级树里,或者所属的 viewController 是否可视。常见的使用场景是例如对键盘、scrollViewDidScroll: 的监听时,常常会在 view 已经不可见时依然触发监听,所以可以用这个属性来过滤。
  8. NSString (QMUI) 增加 qmui_stringMatchedByPattern: 方法用于通过正则表达式来匹配一段文字。
  9. UISearchBar (QMUI) 增加 qmui_backgroundView 接口用于获取背景图所在的 view。
  10. UIScrollView (QMUI) 增加 qmui_scrollToTopUponContentInsetTopChange 用于修改了 contentInset.top 后滚动到顶部用,常见的使用场景是在 viewController 里关闭了 automaticallyAdjustsScrollViewInsets 或者 scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever 的时候设置了自己的 contentInset 后要让 scrollView 滚动位置默认处于顶部。
  11. UITableView (QMUI) 增加 qmui_initialContentInset 用于快速设置自定义的 contentInset 并滚到顶部。
  12. UIWindow (QMUI) 增加 qmui_capturesStatusBarAppearance 属性用于控制该 window 是否有权控制状态栏样式,系统默认认为全屏的 UIWindow 即会夺取状态栏的控制权。
  13. UIViewController (QMUI) 增加 QMUIAppSizeWillChangeNotification 用于在 App 窗口尺寸发生变化时第一时间发出通知,常见使用场景是 iPad Split View 分屏模式。
  14. QMUIAlertController 增加 dismissKeyboardAutomatically 用于在显示时自动降下键盘,默认为 YES,以保持与系统的 UIAlertController 一致,从而避免在键盘升起时显示 alert 可能导致 alert 被键盘盖住的问题。

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

  1. 重构 QMUIImagePreviewViewController,将其展示原理从 UIWindow 的方式改为普通的 present。
  2. 废弃 QMUICommonTableViewController tableViewInitialContentInsettableViewInitialScrollIndicatorInsets 属性。
  3. 废弃 [QMUIHelper renderStatusBarStyleLight/Dark],请使用系统的 preferredStatusBarStyle 代替。

如何适配新版

  1. 检查项目中用到 QMUIImagePreviewViewController 的地方,将其改为新的使用方法。新用法请查看头文件,或者参考 QMUI Demo 里的 QDImagePreviewViewController2。注意由于新的用法使用系统的 presentViewController:animated:completion:,所以需要使用一个现成的 viewController 去 present,若原代码里获取不到 viewController 的引用,可以使用 [QMUIHelper visibleViewController] 代替。
  2. 全局搜索 tableViewInitialContentInsettableViewInitialScrollIndicatorInsets,将其换成新的 [UITableView (QMUI) qmui_initialContentInset]
  3. 全局搜索 renderStatusBarStyleLightrenderStatusBarStyleDark,将其替换为系统的 preferredStatusBarStyle,注意后者要求项目的 Info.plist 里的 View controller-based status bar appearance 改为 YES
  4. 将 2.9.2 标记为废弃的以下四个方法删除,并改为使用配置表的 AutomaticCustomNavigationBarTransitionStyle,或者用 customNavigationBarTransitionKey
    1. shouldCustomNavigationBarTransitionWhenPushAppearing
    2. shouldCustomNavigationBarTransitionWhenPushDisappearing
    3. shouldCustomNavigationBarTransitionWhenPopAppearing
    4. shouldCustomNavigationBarTransitionWhenPopDisappearing
  5. 如果有使用配置表,请搜索配置表里的 windowLevelQMUIImagePreviewView 并将其删除。

Bugfix

  1. Fixed #365 修复某些情况下使用 QMUIImagePreviewViewController 会命中 NSAssert 的 bug。
  2. Fixed #439 修复了因系统 bug 导致 QMUIButton 在 setImage: 前就主动访问过 imageView 后导致后续布局时 imageView.image 依然为 nil,从而导致布局不正确的 bug。
  3. Fixed #445 修复 QMUIImagePreviewViewController 在横竖屏切换时可能导致状态栏丢失的 bug。
  4. Fixed #446 修复系统 UITabBar 某些场景下忽然不可见的 bug。
  5. Fixed #452 修复 QMUIMarqueeLabel 文字没有垂直居中显示的 bug。
  6. 修复 QMUINavigationController 在某个 viewController 的 viewDidAppear 里 push,会被认为上一次 push 的动画尚未结束,所以被拦截,导致 push 失效的 bug。
  7. 修复 QMUIHelperisNotchedScreensafeAreaInsetsForDeviceWithNotch 等于全面屏相关的接口在新 iPad Pro 上判断错误的 bug。
  8. 修复 QMUINavigationBarScrollingAnimatorQMUINavigationBarScrollingSnapAnimator 因浮点精度可能导致的样式错误。
  9. 修复隐藏 UINavigationBar 的界面依然会去修改导航栏样式,导致手势返回时导航栏样式错误的 bug。
  10. 修复开启了 AutomaticCustomNavigationBarTransitionStyle 的情况下在一个界面显示 navigationBar 另一个界面不显示 navigationBar 的时候,切换界面时判断错误的问题。
  11. 修复 UIImageView (QMUI) 在使用 initWithImage: 方法初始化时 qmui_smoothAnimation 的默认值错误的 bug。

其他

  1. 更新 [QMUIHelper isHighPerformanceDevice] 方法的判断,iPad Air 2 及以上、iPhone 8 及以上都认为是高性能设备。
  2. #410 #422 这两个系统 bug 实测在 iOS 12.1.1 里已被修复,因此 QMUI 2.9.3 版本里已对 12.1.1 及以后的系统屏蔽补丁代码。

2.9.2

17 Nov 15:57
Compare
Choose a tag to compare

CALayer (QMUI) 增加 qmui_maskedCorners 用于支持某几个角为圆角的情况,代替系统的 CALayer maskedCorners,因为后者仅支持 iOS 11 及以后的系统。

我们发现在 2.9.1 版本里新增的上述功能在 iOS 10 及以下会导致 crash,因此发布 2.9.2 小版本先修复这个问题。

Bugfix

  1. Fixed #433 修复 iOS 10 下输入框长按会 crash。
  2. Fixed #434 修复 iOS 10 下 iPad 以 UIModalPresentationPopover 的方式显示浮层时 crash。
  3. 修复开启了系统的加粗字体时,QMUIButton 的布局会错误的 bug。
  4. 修复 AutomaticCustomNavigationBarTransitionStyleUINavigationBar 存在 backgroundImage 的情况下还会去判断 barTintColor 的bug。
  5. #432@wbcyclist 修复 [UITableView (QMUI) scrollToRowAtIndexPath:atScrollPosition:animated] 内将 rowNSNotFoundindexPath 误认为非法值的问题。

2.9.1

13 Nov 15:10
Compare
Choose a tag to compare

新增功能

  1. CALayer (QMUI) 增加 qmui_maskedCorners 用于支持某几个角为圆角的情况,代替系统的 CALayer maskedCorners,因为后者仅支持 iOS 11 及以后的系统。
  2. 增加 NSURL (QMUI),提供 qmui_queryItems 用于快速将一个 NSURL 的 query 转换成 NSDictionary
  3. QMUICommonViewController 增加方法 updateNavigationBarAppearance 用于在 QMUINavigationControllerAppearanceDelegate 系列方法的返回值发生变化时可以主动将新值应用到导航栏上。
  4. QMUIMarqueeLabel 增加 fadeWidthPercent 用于控制左右两端的渐变区域的大小。
  5. QMUIScrollAnimator 增加 updateScroll 方法用于主动更新当前的滚动位置对应的动画状态。
  6. QMUINavigationBarScrollingAnimatorQMUINavigationBarScrollingSnapAnimator 增加 continuous 属性,可自由控制达到临界点后的滚动操作是否需要继续触发动画。
  7. QMUITableViewHeaderFooterView 增加 updateAppearance 方法用于子类继承时可以重写父类的默认样式。
  8. QMUIModalPresentationViewController 增加 onlyRespondsToKeyboardEventFromDescendantViews 用于屏蔽非浮层内的 view 产生的键盘事件,默认开启。

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

  1. QMUINavigationControllerDelegate 增加方法 customNavigationBarTransitionKey 用于界面切换时判断是否需要处理导航栏样式,同时废弃旧的4个接口(这个版本依然能用,只是被标记为废弃,下个版本将会完全删除,建议尽快替换):
    - (BOOL)shouldCustomNavigationBarTransitionWhenPushAppearing DEPRECATED_ATTRIBUTE;
    - (BOOL)shouldCustomNavigationBarTransitionWhenPushDisappearing DEPRECATED_ATTRIBUTE;
    - (BOOL)shouldCustomNavigationBarTransitionWhenPopAppearing DEPRECATED_ATTRIBUTE;
    - (BOOL)shouldCustomNavigationBarTransitionWhenPopDisappearing DEPRECATED_ATTRIBUTE;
  2. 接上一点,配置表增加 AutomaticCustomNavigationBarTransitionStyle 用于支持自动判断前后两个界面的导航栏样式,默认关闭,建议可以去掉项目里第 1 点提到的所有方法的使用,改为开启配置表这个自动判断的开关。
  3. 鉴于 #421 的情况,配置表增加开关 ShouldAssertResizableImageCapInsetsError 用于控制 [UIImage (QMUI) resizableImage] 里对 capInsets 错误值的判断是否要用 NSAssert 的方式提醒,默认关闭,只通过 QMUILog 提醒。
  4. 增加宏 QMUICMIActivated 用于标志当前项目是否正在使用配置表,同时 QMUI 控件里用到配置表的值之前都会先判断是否有启用了配置表,避免出现 #423 所示的问题。

如何适配新版

  1. 检查项目里开启了 qmui_multipleDelegatesEnabled 的地方功能是否正常。
  2. 如果有使用配置表,请检查用到 QMUINavigationController 的地方,界面切换时,导航栏样式是否有误。
  3. 如果有使用配置表,请在配置表里增加以下两行,并将其改为你希望的值,建议将第一个改为 YES。
    QMUICMI.automaticCustomNavigationBarTransitionStyle = NO; // AutomaticCustomNavigationBarTransitionStyle : 界面 push/pop 时是否要自动根据两个界面的 barTintColor/backgroundImage/shadowImage 的样式差异来决定是否使用自定义的导航栏效果
    
    QMUICMI.shouldAssertResizableImageCapInsetsError = NO; // ShouldAssertResizableImageCapInsetsError : UIImage (QMUI) 里的 resizableImage 遇到错误的 inset 值时是否需要以 NSAssert 的方式的方式提醒,默认为 NO,NO 则用 QMUILog
  4. 全局搜索 shouldCustomNavigationBarTransitionWhenPushAppearingshouldCustomNavigationBarTransitionWhenPushDisappearingshouldCustomNavigationBarTransitionWhenPopAppearingshouldCustomNavigationBarTransitionWhenPopDisappearing,将用到的地方替换为新的 customNavigationBarTransitionKey,新接口通过判断前后两个界面返回的 NSString 是否一致来决定是否要使用自定义的导航栏转场样式,具体的返回值规则由业务自行约定即可。另外,更建议去掉这些接口的使用,改为用配置表新增的 AutomaticCustomNavigationBarTransitionStyle 开关,全自动判断。

Bugfix

  1. Fixed #422 修复 iOS 12.1 下,当 UINavigationBar 被隐藏时,手势返回过程中 UITabBar 会布局错误的系统 bug。
  2. Fixed #423 修复在不使用配置表的情况下,UIViewController (NavigationBarTransition) 在界面切换时会错误地把导航栏样式设置为系统默认样式的问题。
  3. Fixed #425 修复 UIViewController (NavigationBarTransition) 会强制修改界面的 view.clipsToBounds,可能与业务代码产生冲突的问题。
  4. Fixed #426 修复在 present 一个 QMUINavigationController 的过程中 push,可能导致 push 被拦截,以后都无法继续再 push 新界面的 bug。
  5. Fixed #427 修复将 QMUIAlertController 作为成员变量保存起来复用时,QMUIAlertAction 回调只能执行一次的问题。
  6. 修复 UIScrollView (QMUI)qmui_alreadyAtTopqmui_alreadyAtBottom 可能因浮点精度问题导致返回值错误的问题。
  7. 修复 QMUIMultipleDelegates 内部对 qmui_delegatesSelf 判断错误导致可能认为某个 delegate 无法响应指定 selector 的 bug。
  8. 修复 QMUIKeyboardManager 可能会收到别的 App 发出的键盘事件的问题。
  9. 修复 QMUISearchControllerhidesNavigationBarDuringPresentationNO 且项目使用了 shouldCustomizeNavigationBarTransitionIfHideable 的情况下会导致导航栏消失的 bug。

其他

  1. [QMUITips hideAllTips] 改为隐藏所有的 QMUITips,以前是只隐藏 [UIApplication sharedApplication].delegate.window 里的 QMUITips