Releases: Tencent/QMUI_iOS
3.1.5
新增功能
UITableView (QMUI)
增加qmui_performBatchUpdates:completion:
以支持 iOS 9-10 的使用。
Bugfix
- #554 by @caoer 修改
UIColor (QMUI)
若干错误的nullable
标记。 - #557 修复
QMUITextView
在设置了带小数点的frame
后可能在右边出现一条黑色边框的 bug。 - #558 修复
QMUICommonTableViewController
对于tableView.allowsMultipleSelection = YES
的场景仍然会在viewWillAppear:
时清空选中的 cell 的错误行为。 - #562 修复
UILabel (QMUI)
在未使用qmui_textAttributes
及qmui_lineHeight
的情况下仍会额外处理setAttributedText:
,导致可能产生性能问题的 bug。 - 修复
UIViewController (QMUI).qmui_navigationBarMaxYInViewCoordinator
在前后两个界面对navigationBar
显隐设置不相同的情况下,手势返回过程中可能出现计算错误的 bug,另外在 QMUI Demo 中也新增了示例界面,具体请看 QMUIKit→QMUINavigationController→获取导航栏的正确布局位置。
3.1.4
3.1.3
新增功能
UIScrollView (QMUI)
增加qmui_setContentInset:animated:
支持以动画形式修改contentInset
。QMUIHelper
增加+isZoomedMode
方法用于判断当前设备是否处于放大模式下。UITableViewCell (QMUI)
增加qmui_setHighlightedBlock
和qmui_setSelectedBlock
。
Bugfix
- #509 修复
UIImageView
开启了qmui_smoothAnimation
后,sizeToFit
得到CGSizeZero
的错误大小的 bug。 - #512 by @ziezheng 修复当使用
qmui_usedAsTableHeaderView
的模式下,UISearchBar
从 active 回到非 active 状态过程中会出现抖动的系统 bug。 - #512 by @ziezheng 修复手势返回过程中导航栏按钮动画错误的 bug。
- #524 修复
QMUIImagePickerViewController
在 iPhone X 上布局可能错误,导致无法被设置为2列的 bug。 - #529 修复
QMUILabel
使用了contentEdgeInsets
后在某些情况下文字偏上的 bug。 - #530 修复用于区分放大模式的宏
IS_ZOOMEDMODE
在 iPhone Plus 系列设备下不准确的 bug。 - #535 修复
QMUIRuntime.h
被 import 到 MRC 的文件中时会导致编译失败的 bug。 - 修复
UIBarItem (QMUI)
在调用qmui_viewLayoutDidChangeBlock
时可能产生的野指针 crash。 - 修复
QMUIBadge
同时存在 badgeString 和 badgeInteger 的情况下,未读数字没有盖在红点上的 bug。
3.1.2
会带来 QMUI 新旧版本兼容问题的更新
UITableView+QMUICellHeightKeyCache
提供的高度缓存功能,当某个 key 的高度已经计算完成后,现在会在tableView:estimatedHeightForRowAtIndexPath:
里返回已经计算过的结果,从而达到更精准的滚动的目的。同时,对应的 DemoQDCellHeightKeyCacheViewController.m
也进行了更新。
如何适配新版
- 全局搜索
qmui_cacheCellHeightByKeyAutomatically = YES
,查看开启自动缓存的列表,是否有重写tableView:estimatedHeightForRowAtIndexPath:
方法,如果有,需注意这个方法如今只会在该indexPath
对应的 key 的高度尚未被计算出来时才会被调用,一旦该 key 已经有了高度,则下次都会直接从缓存里读取高度,而不会触发tableView:estimatedHeightForRowAtIndexPath:
,请审视该方法里的业务代码是否会受本次变动的影响。
Bugfix
- #493 修复以
QMUINavigationButton
为customView
的UIBarButtonItem
无法正确布局 badge 的 bug。 - #495 修复作为
UINavigationController.rootViewController
的QMUICommonViewController
在viewDidLoad
时通过becomeFirstResponder
升起键盘后,shouldHideKeyboardWhenTouchInView:
无效的 bug。 - #497 修复
QMUIDialogSelectionViewController.selectedItemIndexes
默认值失效的 bug。 - #499 修复 iOS 9 下
QMUICollectionViewPagingLayout
滚动越出边界后松手,无法自动滚回正确位置的 bug。 - #502 修复 iOS 9 下弹出
UIAlertController
会死循环的 bug。 - #506 修复
QMUINavigationTitleView
不支持contentVerticalAlignment
切换的 bug。 - 修复
UIBarItem (QMUI)
内使用qmui_layoutSubviewsBlock
不当导致可能产生的野指针 crash。 - 修复
UITableView+QMUICellHeightKeyCache
qmui_invalidateCellHeightCachedForKey:
方法无效的 bug。
3.1.1
Bugfix
- Fixed #482 修复
[QMUIHelper isNotchedScreen]
在某些场景下可能判断错误的 bug。 - Fixed #485 修复使用
QMUIAsset requestThumbnailImageWithSize:
获取缩略图可能会失败的 bug。 - Fixed #488 修复
QMUIPopupContainerView
的sourceView
重复设置时,qmui_frameDidChangeBlock
无法被更新的 bug。 - Fixed #489 修复
QMUIDialogTextFieldViewController.textFieldTitleLabels
返回了错误的数组的 bug。 - Fixed #491 修复没开启
ShouldPrintQMUIWarnLogToConsole
的情况下,QMUIWarn
无法将 log 打印到 Xcode 控制台的 bug。
3.1.0
新增功能
-
UIBarItem (QMUI)
增加qmui_viewDidSetBlock
、qmui_viewDidLayoutSubviewsBlock
、qmui_viewLayoutDidChangeBlock
用于操作内部的 view,从而解决系统的UIBarButtonItem
内的 view 延迟加载引发的系列问题。这3个新接口也被用于
QMUIBadge
、QMUIPopupContainerView
组件内。 -
NSArray (QMUI)
增加qmui_arrayWithObjects:
用于将多个数组或对象合并成一个新数组。 -
UIView (QMUI)
增加qmui_layoutSubviewsBlock
用于方便地重写layoutSubviews
。 -
UIView (QMUI)
增加qmui_
系列的convertRect
/convertPoint
方法用于在两个不同UIWindow
内的 view 之间进行坐标转换,系统的方法限制了两个 view 必须从属于同一个UIWindow
。由于该方法对从属同一个UIWindow
的 view 之间的转换也不会产生多少额外的操作,可随意使用,无需担心性能。 -
UITextView (QMUI)
增加qmui_convertUITextRangeFromNSRange:
用于将一个NSRange
转换成UITextRange
对象。 -
UITextView (QMUI)
增加qmui_scrollRangeToVisible:
支持滚动到指定 range 可见的区域。 -
增加
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
-
增加
QMUIConsole
组件用于在屏幕上直接打印 log,支持搜索,支持按 Level、Name 过滤 log。同时配置表增加开关ShouldPrintQMUIWarnLogToConsole
支持自动将QMUILogWarn()
的提示直接显示到屏幕上(默认关闭)。QMUI 的组件以后将会用QMUILogWarn()
来提醒一些重要信息但又不适合用NSAssert
打断进程的场景,从而解决类似 #421-comment 的问题。
会带来 QMUI 新旧版本兼容问题的更新
QMUIPopupContainerView
废弃layoutWithTargetView:
、layoutWithTargetRectInScreenCoordinate:
,改为通过指定sourceBarItem
/sourceView
/sourceRect
的方式布局,从而保证目标源的布局发生变化时 popup 也能自动更新布局(以前的版本,当目标源的布局发生变化时要手动更新 popup 的布局,所以总是需要为横竖屏、iPad 分屏等情况写一堆适配)。这个改动也得益于新的UIBarItem (QMUI)
组件。UIWindow (QMUI)
的qmui_capturesStatusBarAppearance
属性在这个版本更换了实现方式,现已支持所有 iOS 版本(以前仅支持 iOS 10 及以后)。- 优化
QMUICellHeightCache
的实现,使其在UITableView
/UICollectionView
的大小发生变化时自动刷新高度缓存,无需手动管理。 UITableView
/UICollectionView
增加属性qmui_invalidateIndexPathHeightCachedAutomatically
用于控制由QMUICellHeightIndexPathCache
维护的高度缓存是否应该在适当的时机自动刷新,同时废弃QMUICellHeightIndexPathCache
里的属性automaticallyInvalidateEnabled
。UITableView
/UICollectionView
增加qmui_invalidateAllHeight
、qmui_invalidateHeightForKey:
、qmui_invalidateHeightAtIndexPath:
方法用于刷新列表里由QMUICellHeightCache
维护的缓存,以前刷新的方式是拿到UITableView
/UICollectionView
当前的缓存容器,再调用缓存容器自己的 invalidate 方法,但由于现在一个列表可能存在多个缓存容器(分别对应不同的列表 bounds 大小),每次刷新都应该同时刷新所有缓存容器的缓存,所以才增加这系列方法。- 同样的,
QMUICellHeightKeyCache
组件也为UITableView
增加qmui_invalidateCellHeightCachedForKey:
方法用于刷新某个 key 的缓存,请注意区分两个不同的 cache 组件名。 - 以前的版本,
UINavigationController+NavigationBarTransition
内在切换界面时对于隐藏了导航栏的界面将不会设置该界面的导航栏样式,可能导致后续该界面把导航栏重新显示出来时会得到错误的样式。新版本去掉了这个限制,并且对开启了AutomaticCustomNavigationBarTransitionStyle
的情况,会为导航栏显隐状态不一致的两个界面开启假 bar 的转场效果。
如何适配新版
- 全局搜索用到
QMUIPopupContainerView
、QMUIPopupMenuView
的地方,将其改为新的用法。新用法请阅读QMUIPopupContainerView.h
或参考 Demo 里的QDPopupContainerViewController
。 - 全局搜索用到
qmui_capturesStatusBarAppearance
的地方,如果以前有加上 iOS 版本 >= 10.0 的判断,那么现在可以去掉了。 - 全局搜索 “automaticallyInvalidateEnabled”,将其替换为对应的
UITableView
/UICollectionView
实例的qmui_invalidateIndexPathHeightCachedAutomatically
属性。 - 全局搜索“qmui_keyedHeightCache invalidate”,将该处代码改为对应的
UITableView
/UICollectionView
实例的qmui_invalidateHeightForKey:
或qmui_invalidateAllHeight
方法。 - 全局搜索“qmui_indexPathHeightCache invalidate”,将该处代码改为对应的
UITableView
/UICollectionView
实例的qmui_invalidateHeightAtIndexPath:
或qmui_invalidateAllHeight
方法。 - 全局搜索“qmui_currentCellHeightKeyCache invalidate”,将该处代码改为对应的
UITableView
实例的qmui_invalidateCellHeightCachedForKey:
或qmui_invalidateAllCellHeightKeyCache
方法。 - 检查项目中通过
preferredNavigationBarHidden
默认隐藏导航栏的界面与其他界面之前互相 push/pop 时导航栏效果是否正确。 - 如果有使用配置表,请将以下代码复制到项目的配置表中,并改为你希望的值:
QMUICMI.shouldPrintQMUIWarnLogToConsole = NO; // ShouldPrintQMUIWarnLogToConsole : 是否在出现 QMUILogWarn 时自动把这些 log 以 QMUIConsole 的方式显示到设备屏幕上
- 如果有使用配置表,请删掉配置表里的开关
ShouldAssertResizableImageCapInsetsError
,现在改为用ShouldPrintQMUIWarnLogToConsole
代替了。
Bugfix
- Fixed #471 修复 iOS 10 上切换输入法可能产生的死循环。
- Fixed #471-comment 修复一个
UIWindow
的 property 如果使用懒加载会导致死循环的 bug。 - Fixed #476 修复 iOS 10 下带输入框的
QMUIModalPresentationViewController
显示出来时无法感知到键盘的高度,导致浮层布局错误的 bug。 - Fixed #479 修复系统 bug:当
UISearchController
push 进隐藏导航栏的界面,会强制把导航栏显示出来。注意该修复仅对QMUICommonViewController
、QMUICommonTableViewController
有效。 - 修复
QMUISearchController
在搜索状态下 push 到另一个界面再返回,再退出搜索,当前界面的导航栏样式会变成刚刚那个界面的样式的 bug。 - 修复
QMUIMarqueeLabel
在 xib 内设置 text 不生效的问题。 - 修复
QMUICollectionViewPagingLayout
对列表结尾的滚动判断错误导致最后一页无法准确停靠的 bug。 - 修复
QMUIButton
开启了adjustsImageTintColorAutomatically
后,如果只设置除了UIControlStateNormal
外的其他状态的图片,则会导致处于UIControlStateNormal
状态时按钮图片黑色的 bug。
其他
- 优化
NSAttributedStringKey
类型声明,以前很多地方都写成了NSString *
。
3.0.0
从 3.0.0 开始,QMUI 支持的最低版本改为 9.0,因此更新 3.0.0 之前请先检查业务项目的版本支持情况。若项目仍需支持 iOS 8,但又希望带上 3.0.0 版本内的 bug 修复代码,则可自行查阅以下文件的 commit(其他文件可无视),手工将代码更新到项目。代码变更量不多。
- QMUIAsset.m
- QMUIHelper.m
- UITableView+QMUI.m
- QMUIZoomImageView.m
- QMUICollectionViewPagingLayout.m
新增功能
UIView (QMUI)
增加qmui_frameWillChangeBlock
和qmui_frameDidChangeBlock
便于监听 frame 的变化。- 由于不需要兼容 iOS 8,因此
QMUIKeyboardManager
加回对 iPad 浮动键盘的支持。 QMUICollectionViewPagingLayout
增加属性pagingThreshold
用于控制触发翻页的临界点。- 我们观察到在 12.1.1 后已被系统修复的 UITabBar bug #410 在某些小众场景下依然存在问题,但由于出现的条件尚不明确,因此我们在配置表新增开关
ShouldFixTabBarButtonBugForAll
允许对应的修复代码在 iOS 12.1.1 之后依然能生效,但开关默认为NO
,也即仅在 iOS 12.1.0 才生效,需要的项目请自行打开。
如何适配新版
- 如果有使用配置表,请将以下代码增加到配置表内,并改为所需的值。
QMUICMI.shouldFixTabBarButtonBugForAll = NO; // ShouldFixTabBarButtonBugForAll : 是否要对 iOS 12.1.1 及以后的版本也修复手势返回时 tabBarButton 布局错误的 bug(issue #410),默认为 NO
Bugfix
- Fixed #376 by @passerbyloo 修复
QMUIAsset
在读取大图时出现内存泄露的 bug,PR #468 #470。 - Fixed #463 #467 修复
[QMUIHelper isNotchedScreen]
判断错误的 bug。 - Fixed #466 by @wbcyclist 修复
[UITableView (QMUI) qmui_scrollToRowAtIndexPath:atScrollPosition:animated:]
内对于 section 合法而 row 为NSNotFound
的 indexPath 会误报为非法 indexPath 的 bug。 - Fixed #472 修复
QMUIZoomImageView
在播放视频后实例销毁时会产生的 crash。 - 修复
QMUICollectionViewPagingLayout
在scrollDirection
为UICollectionViewScrollDirectionVertical
时滚动不准确的 bug。
其他
- 优化项目内一些 enum 的定义写法,以更好地兼容 Swift。
2.9.3
新增功能
- 增加
NSObject (QMUI_DataBind)
用于临时给NSObject
添加一些信息,省去自定义 class 或者增加 property 的成本。 UIViewController (QMUI)
增加qmui_visibleState
用于获取当前 viewController 所处的生命周期阶段。UIViewController (QMUI)
增加qmui_visibleStateDidChangeBlock
用于监听qmui_visibleState
变化。UIViewController (QMUI)
增加qmui_prefersStatusBarHidden
和qmui_preferredStatusBarStyle
用于获取真正的状态栏信息,如果仅使用系统的这两个方法需要额外处理childViewController
的场景。UIView (QMUI)
增加qmui_isControllerRootView
用于判断当前 view 是否为某个 viewController 的 view。UIView (QMUI)
增加qmui_viewController
用于获取当前 view 所在的 viewController。UIView (QMUI)
增加qmui_visible
用于判断该 view 是否处于 window 层级树里,或者所属的 viewController 是否可视。常见的使用场景是例如对键盘、scrollViewDidScroll:
的监听时,常常会在 view 已经不可见时依然触发监听,所以可以用这个属性来过滤。NSString (QMUI)
增加qmui_stringMatchedByPattern:
方法用于通过正则表达式来匹配一段文字。UISearchBar (QMUI)
增加qmui_backgroundView
接口用于获取背景图所在的 view。UIScrollView (QMUI)
增加qmui_scrollToTopUponContentInsetTopChange
用于修改了contentInset.top
后滚动到顶部用,常见的使用场景是在 viewController 里关闭了automaticallyAdjustsScrollViewInsets
或者scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever
的时候设置了自己的contentInset
后要让 scrollView 滚动位置默认处于顶部。UITableView (QMUI)
增加qmui_initialContentInset
用于快速设置自定义的contentInset
并滚到顶部。UIWindow (QMUI)
增加qmui_capturesStatusBarAppearance
属性用于控制该 window 是否有权控制状态栏样式,系统默认认为全屏的UIWindow
即会夺取状态栏的控制权。UIViewController (QMUI)
增加QMUIAppSizeWillChangeNotification
用于在 App 窗口尺寸发生变化时第一时间发出通知,常见使用场景是 iPad Split View 分屏模式。QMUIAlertController
增加dismissKeyboardAutomatically
用于在显示时自动降下键盘,默认为 YES,以保持与系统的UIAlertController
一致,从而避免在键盘升起时显示 alert 可能导致 alert 被键盘盖住的问题。
会带来 QMUI 新旧版本兼容问题的更新
- 重构
QMUIImagePreviewViewController
,将其展示原理从UIWindow
的方式改为普通的 present。 - 废弃
QMUICommonTableViewController tableViewInitialContentInset
和tableViewInitialScrollIndicatorInsets
属性。 - 废弃
[QMUIHelper renderStatusBarStyleLight/Dark]
,请使用系统的preferredStatusBarStyle
代替。
如何适配新版
- 检查项目中用到
QMUIImagePreviewViewController
的地方,将其改为新的使用方法。新用法请查看头文件,或者参考 QMUI Demo 里的QDImagePreviewViewController2
。注意由于新的用法使用系统的presentViewController:animated:completion:
,所以需要使用一个现成的 viewController 去 present,若原代码里获取不到 viewController 的引用,可以使用[QMUIHelper visibleViewController]
代替。 - 全局搜索
tableViewInitialContentInset
、tableViewInitialScrollIndicatorInsets
,将其换成新的[UITableView (QMUI) qmui_initialContentInset]
。 - 全局搜索
renderStatusBarStyleLight
、renderStatusBarStyleDark
,将其替换为系统的preferredStatusBarStyle
,注意后者要求项目的Info.plist
里的View controller-based status bar appearance
改为YES
。 - 将 2.9.2 标记为废弃的以下四个方法删除,并改为使用配置表的
AutomaticCustomNavigationBarTransitionStyle
,或者用customNavigationBarTransitionKey
。shouldCustomNavigationBarTransitionWhenPushAppearing
shouldCustomNavigationBarTransitionWhenPushDisappearing
shouldCustomNavigationBarTransitionWhenPopAppearing
shouldCustomNavigationBarTransitionWhenPopDisappearing
- 如果有使用配置表,请搜索配置表里的
windowLevelQMUIImagePreviewView
并将其删除。
Bugfix
- Fixed #365 修复某些情况下使用
QMUIImagePreviewViewController
会命中NSAssert
的 bug。 - Fixed #439 修复了因系统 bug 导致 QMUIButton 在
setImage:
前就主动访问过imageView
后导致后续布局时imageView.image
依然为nil
,从而导致布局不正确的 bug。 - Fixed #445 修复
QMUIImagePreviewViewController
在横竖屏切换时可能导致状态栏丢失的 bug。 - Fixed #446 修复系统 UITabBar 某些场景下忽然不可见的 bug。
- Fixed #452 修复
QMUIMarqueeLabel
文字没有垂直居中显示的 bug。 - 修复
QMUINavigationController
在某个 viewController 的viewDidAppear
里 push,会被认为上一次 push 的动画尚未结束,所以被拦截,导致 push 失效的 bug。 - 修复
QMUIHelper
的isNotchedScreen
、safeAreaInsetsForDeviceWithNotch
等于全面屏相关的接口在新 iPad Pro 上判断错误的 bug。 - 修复
QMUINavigationBarScrollingAnimator
和QMUINavigationBarScrollingSnapAnimator
因浮点精度可能导致的样式错误。 - 修复隐藏
UINavigationBar
的界面依然会去修改导航栏样式,导致手势返回时导航栏样式错误的 bug。 - 修复开启了
AutomaticCustomNavigationBarTransitionStyle
的情况下在一个界面显示 navigationBar 另一个界面不显示 navigationBar 的时候,切换界面时判断错误的问题。 - 修复
UIImageView (QMUI)
在使用initWithImage:
方法初始化时qmui_smoothAnimation
的默认值错误的 bug。
其他
2.9.2
CALayer (QMUI)
增加qmui_maskedCorners
用于支持某几个角为圆角的情况,代替系统的CALayer maskedCorners
,因为后者仅支持 iOS 11 及以后的系统。
我们发现在 2.9.1 版本里新增的上述功能在 iOS 10 及以下会导致 crash,因此发布 2.9.2 小版本先修复这个问题。
Bugfix
- Fixed #433 修复 iOS 10 下输入框长按会 crash。
- Fixed #434 修复 iOS 10 下 iPad 以
UIModalPresentationPopover
的方式显示浮层时 crash。 - 修复开启了系统的加粗字体时,QMUIButton 的布局会错误的 bug。
- 修复
AutomaticCustomNavigationBarTransitionStyle
在UINavigationBar
存在backgroundImage
的情况下还会去判断barTintColor
的bug。 - #432 由 @wbcyclist 修复
[UITableView (QMUI) scrollToRowAtIndexPath:atScrollPosition:animated]
内将row
为NSNotFound
的indexPath
误认为非法值的问题。
2.9.1
新增功能
CALayer (QMUI)
增加qmui_maskedCorners
用于支持某几个角为圆角的情况,代替系统的CALayer maskedCorners
,因为后者仅支持 iOS 11 及以后的系统。- 增加
NSURL (QMUI)
,提供qmui_queryItems
用于快速将一个NSURL
的 query 转换成NSDictionary
。 QMUICommonViewController
增加方法updateNavigationBarAppearance
用于在QMUINavigationControllerAppearanceDelegate
系列方法的返回值发生变化时可以主动将新值应用到导航栏上。QMUIMarqueeLabel
增加fadeWidthPercent
用于控制左右两端的渐变区域的大小。QMUIScrollAnimator
增加updateScroll
方法用于主动更新当前的滚动位置对应的动画状态。QMUINavigationBarScrollingAnimator
和QMUINavigationBarScrollingSnapAnimator
增加continuous
属性,可自由控制达到临界点后的滚动操作是否需要继续触发动画。QMUITableViewHeaderFooterView
增加updateAppearance
方法用于子类继承时可以重写父类的默认样式。QMUIModalPresentationViewController
增加onlyRespondsToKeyboardEventFromDescendantViews
用于屏蔽非浮层内的 view 产生的键盘事件,默认开启。
会带来 QMUI 新旧版本兼容问题的更新
QMUINavigationControllerDelegate
增加方法customNavigationBarTransitionKey
用于界面切换时判断是否需要处理导航栏样式,同时废弃旧的4个接口(这个版本依然能用,只是被标记为废弃,下个版本将会完全删除,建议尽快替换):- (BOOL)shouldCustomNavigationBarTransitionWhenPushAppearing DEPRECATED_ATTRIBUTE; - (BOOL)shouldCustomNavigationBarTransitionWhenPushDisappearing DEPRECATED_ATTRIBUTE; - (BOOL)shouldCustomNavigationBarTransitionWhenPopAppearing DEPRECATED_ATTRIBUTE; - (BOOL)shouldCustomNavigationBarTransitionWhenPopDisappearing DEPRECATED_ATTRIBUTE;
- 接上一点,配置表增加
AutomaticCustomNavigationBarTransitionStyle
用于支持自动判断前后两个界面的导航栏样式,默认关闭,建议可以去掉项目里第 1 点提到的所有方法的使用,改为开启配置表这个自动判断的开关。 - 鉴于 #421 的情况,配置表增加开关
ShouldAssertResizableImageCapInsetsError
用于控制[UIImage (QMUI) resizableImage]
里对capInsets
错误值的判断是否要用 NSAssert 的方式提醒,默认关闭,只通过QMUILog
提醒。 - 增加宏
QMUICMIActivated
用于标志当前项目是否正在使用配置表,同时 QMUI 控件里用到配置表的值之前都会先判断是否有启用了配置表,避免出现 #423 所示的问题。
如何适配新版
- 检查项目里开启了
qmui_multipleDelegatesEnabled
的地方功能是否正常。 - 如果有使用配置表,请检查用到
QMUINavigationController
的地方,界面切换时,导航栏样式是否有误。 - 如果有使用配置表,请在配置表里增加以下两行,并将其改为你希望的值,建议将第一个改为 YES。
QMUICMI.automaticCustomNavigationBarTransitionStyle = NO; // AutomaticCustomNavigationBarTransitionStyle : 界面 push/pop 时是否要自动根据两个界面的 barTintColor/backgroundImage/shadowImage 的样式差异来决定是否使用自定义的导航栏效果 QMUICMI.shouldAssertResizableImageCapInsetsError = NO; // ShouldAssertResizableImageCapInsetsError : UIImage (QMUI) 里的 resizableImage 遇到错误的 inset 值时是否需要以 NSAssert 的方式的方式提醒,默认为 NO,NO 则用 QMUILog
- 全局搜索
shouldCustomNavigationBarTransitionWhenPushAppearing
、shouldCustomNavigationBarTransitionWhenPushDisappearing
、shouldCustomNavigationBarTransitionWhenPopAppearing
、shouldCustomNavigationBarTransitionWhenPopDisappearing
,将用到的地方替换为新的customNavigationBarTransitionKey
,新接口通过判断前后两个界面返回的NSString
是否一致来决定是否要使用自定义的导航栏转场样式,具体的返回值规则由业务自行约定即可。另外,更建议去掉这些接口的使用,改为用配置表新增的AutomaticCustomNavigationBarTransitionStyle
开关,全自动判断。
Bugfix
- Fixed #422 修复 iOS 12.1 下,当
UINavigationBar
被隐藏时,手势返回过程中UITabBar
会布局错误的系统 bug。 - Fixed #423 修复在不使用配置表的情况下,
UIViewController (NavigationBarTransition)
在界面切换时会错误地把导航栏样式设置为系统默认样式的问题。 - Fixed #425 修复
UIViewController (NavigationBarTransition)
会强制修改界面的view.clipsToBounds
,可能与业务代码产生冲突的问题。 - Fixed #426 修复在 present 一个
QMUINavigationController
的过程中 push,可能导致 push 被拦截,以后都无法继续再 push 新界面的 bug。 - Fixed #427 修复将
QMUIAlertController
作为成员变量保存起来复用时,QMUIAlertAction
回调只能执行一次的问题。 - 修复
UIScrollView (QMUI)
的qmui_alreadyAtTop
、qmui_alreadyAtBottom
可能因浮点精度问题导致返回值错误的问题。 - 修复
QMUIMultipleDelegates
内部对qmui_delegatesSelf
判断错误导致可能认为某个 delegate 无法响应指定 selector 的 bug。 - 修复
QMUIKeyboardManager
可能会收到别的 App 发出的键盘事件的问题。 - 修复
QMUISearchController
在hidesNavigationBarDuringPresentation
为NO
且项目使用了shouldCustomizeNavigationBarTransitionIfHideable
的情况下会导致导航栏消失的 bug。
其他
[QMUITips hideAllTips]
改为隐藏所有的QMUITips
,以前是只隐藏[UIApplication sharedApplication].delegate.window
里的QMUITips
。