Skip to content

Releases: Tencent/QMUI_iOS

2.9.0

01 Nov 13:01
Compare
Choose a tag to compare

新增功能

  1. 增加 QMUIScrollAnimator 用于实现与 UIScrollView 滚动相关的动画交互。
  2. 增加 QMUINavigationBarScrollingAnimator 用于实现边滚动边改变 UINavigationBar 的动画效果。
    scrolling animator
  3. 增加 QMUINavigationBarScrollingSnapAnimator 用于实现滚动到某个临界点时触发 UINavigationBar 动画的效果。
    scrolling snap animator
  4. UINavigationBar (QMUI) 增加 qmui_backgroundViewqmui_backgroundContentViewqmui_shadowImageView 用于访问私有的 subview。
  5. UITabBar (QMUI) 增加 qmui_backgroundViewqmui_shadowImageView 用于访问私有的 subview。
  6. UIView (QMUI_Border) 增加 qmui_borderPosition 用于控制 border 绘制的位置,支持 inside、center、outside。
    border location
  7. UIView (QMUI) 增加 qmui_tintColorDidChangeBlock 用于监听 tintColor 变化。
  8. UIView (QMUI) 增加 qmui_hitTestBlock 用于修改点击事件的传递。
  9. QMUIHelper 增加 executeAnimationBlock:completionBlock: 方法用于某些系统自带的动画完成时的回调。
  10. 保护系统的 [UIImage resizableImageWithCapInsets:] 方法在传进来的 capInsets 水平/垂直的和大于等于图片本身大小会在 render 时产生的 crash。
  11. UINavigationController (QMUI) 对系统的 push/pop 系列方法增加 completion 版本的接口,便于在动画完成后做一些事情。
  12. CGRectSetWidth()CGRectSetHeight() 增加对传进来的负数的宽高值的保护,避免产生错误的 rect。

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

  1. QMUIImagePickerCollectionViewCell 增加对收藏资源的标志,同时去掉视频资源的标志,只展示视频时长。
  2. QMUIHelper 移除方法 actionSpringAnimationForView:

如何适配新版

  1. 全局搜索用到 [QMUIImagePickerCollectionViewCell videoMarkImage] 的地方,将其删除。
  2. 全局搜索用到 [QMUIImagePickerCollectionViewCell videoMarkImageViewMargins] 的地方,将其删除。
  3. 全局搜索用到 [QMUIImagePickerCollectionViewCell videoBottomShadowLayer] 的地方,将其改为 bottomShadowLayer
  4. 全局搜索 [QMUIHelper actionSpringAnimationForView:],去掉对其的使用。

Bugfix

  1. Fixed #407 修复以 present 方式展示的 QMUIModalPresentationViewController 无法正确获取背后正在显示的界面所支持的设备方向的 bug。
  2. Fixed #410 系统 iOS 12.1 磨砂的 tabBar 在手势返回时 tabBarItem 布局错误的 bug。
  3. Fixed #412 修复 QMUINavigationTitleViewQMUICommonViewController 无法响应 [UINavigationBar appearance]. titleTextAttributes 的 bug。
  4. Fixed #420 修复 QMUIAlertController 以 actionSheet 形式显示/隐藏时动画的值计算错误的 bug。
  5. 修复 QMUIMultipleDelegatesStaticTableViewQMUICellHeightKeyCacheQMUICellSizeKeyCache 同时使用时导致方法混乱的 bug。
  6. 修复 UINavigationController (NavigationBarTransition) 里对配置表内为 nil 的值没有使用,导致 navigationBar 切换界面后样式错误的 bug。

2.8.1

26 Sep 07:02
Compare
Choose a tag to compare
  1. Fixed #404 修复 StatusBarHeightConstant 在全面屏 iPhone 横屏时值错误的 bug。
  2. Fixed #404 修复 QMUINavigationButton 在 iOS 11-12 下可能出现布局错误的 bug。
  3. 修复项目信息上报可能出现获取不到 display name、QMUI 版本号的问题。

2.8.0

21 Sep 09:15
3f16854
Compare
Choose a tag to compare

这个版本有三个主要的更新点:

  1. 兼容新发布的 iPhone XS/XS Max/XR,伴随较多的布局相关代码变更。
  2. 优化相册和 UIImageView 播放动图的性能。
  3. 增加 Debug 下上报项目信息的行为,具体请看文末的 关于项目信息统计

新增功能

  1. 新增 QMUIPropertyDescriptor 用于包装一个 runtime 下的 property 结构 objc_property_t,从而以更高级直观的语法来访问 objc_property_t 的各种信息。
  2. QMUILabel 增加 didCopyBlock 属性便于在复制完文本后做一些事情。
  3. UIImage (QMUI) 增加 qmui_animatedImageWithData:qmui_animatedImageWithData:scale: 用于从 data 创建 animated image。
  4. UIImageView (QMUI) 增加 qmui_pause 用于暂停/恢复当前动图的播放。
  5. CALayer (QMUI) 增加 qmui_pause 用于暂停/恢复当前 layer 上的所有动画。
  6. 通过 UIImageView (QMUI) 优化系统的 UIImageView 播放 animated image 的性能,系统的播放方式在配合 UIScrollView 使用时会卡顿。这个优化默认开启,可通过新增的接口 qmui_smoothAnimation 关闭。
  7. 新增 NSCharacterSet (QMUI),提供方法用于对 URL query 里的 value 编码,避免 value 带有 &= 等字符会导致 query 解析混乱的问题。
  8. UISearchBar (QMUI) 增加属性 qmui_cancelButtonFont 用于修改取消按钮的字体,并让原有几个样式相关的属性支持 UIAppearance
  9. UITextField (QMUI) 增加 qmui_clearButton 用于获取 clearButton 的引用,增加 qmui_clearButtonImage 用于修改 clearButton 的图片。
  10. QMUITextField 增加 clearButtonPositionAdjustment 属性用于调整 clearButton 的位置。
  11. QMUIHelper 增加系列接口用于兼容新发布的 iPhone XS/XS Max/XR:
    + (NSString *)deviceModel;
    + (BOOL)isNotchedScreen;// 是否全面屏类型的设备
    + (BOOL)isRegularScreen;// 将屏幕分为普通和紧凑两种,这个方法用于判断是否为普通屏幕
    + (BOOL)is65InchScreen;// iPhone XS Max
    + (BOOL)is61InchScreen;// iPhone XR
    + (CGSize)screenSizeFor65Inch;
    + (CGSize)screenSizeFor61Inch;
  12. QMUICommonDefines 重新整理了与设备区分相关的宏,涉及到新旧接口重命名,请查看 如何适配新版
    #define PreferredValueForiPhone() // 用于区分 iPhone,如果是 iPad 则取与 Max/Plus 相同的值
    #define PreferredValueForDeviceIncludingiPad() // 用于区分 iPad 和 iPhone
    #define PreferredValueForNotchedDevice() // 用于区分全面屏与非全面屏
    #define PreferredValueForVisualDevice() // 用于区分宽松屏幕和紧凑屏幕
    #define PreferredValueForAll() // 用于区分目前所有的设备
    #define SafeAreaInsetsConstantForDeviceWithNotch // 用于获取全面屏手机的 safeAreaInsets 静态值,适用于那些不方便实时获取的场景
    #define IS_NOTCHED_SCREEN // 判断是否全面屏
    #define IS_65INCH_SCREEN // 判断是否为 XS Max
    #define IS_61INCH_SCREEN // 判断是否为 XR

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

  1. QMUIPopupMenuView 之前仅支持 item 统一的分隔线,所以无法做到 section 与 section 之间的特定分隔线样式,所以新版本将分隔线拆分为 item 之间的和 section 之间的,也带来了较多属性变更,请查看如何适配新版
  2. QMUIPopupMenuView 大小计算策略改为自适应自身内容,需要检查用到的地方布局是否正常。
  3. 配置表 supportedOrientationMask 默认值改为 UIInterfaceOrientationMaskAll,以避免与项目支持方向不一致时可能产生的 crash,相关 issue 请看 #395
  4. 更新了相簿列表 QMUIAlbumTableViewCell 的默认样式,业务项目请检查是否需要调整。
  5. 为了适配新 iPhone,QMUIHelperQMUICommonDefines.h 对一些设备相关的方法进行重命名。

如何适配新版

  1. 全局搜索用到 QMUIPopupMenuView 的地方,删除 shouldShowSectionSeparatorOnlyseparatorColor,对应增加新增的接口 itemSeparatorColor itemSeparatorInsetshouldShowSectionSeparatorsectionSeparatorColorsectionSeparatorInset
  2. 检查用到 QMUIPopupMenuView 的地方,浮层大小是否与旧版一致。
  3. 全局搜索 safeAreaInsetsForIPhoneX,将其重命名为 safeAreaInsetsForDeviceWithNotch
  4. 全局搜索 IPhoneXSafeAreaInsets,将其重命名为 SafeAreaInsetsConstantForDeviceWithNotch
  5. 全局搜索 PreferredVarForDevices,将其重命名为 PreferredValueForiPhone
  6. 全局搜索 PreferredVarForUniversalDevices,将其重命名为 PreferredValueForDeviceIncludingiPad
  7. 全局搜索 PreferredVarForUniversalDevicesIncludingIPhoneX,根据业务的逻辑,考虑更换为新的 PreferredValueForNotchedDevicePreferredValueForAll
  8. 请检查你项目 Device Orientation 支持的方向是否与配置表里 supportedOrientationMask 的方向不匹配。
    image
  9. 检查选图控件调起的相簿列表样式是否符合预期。

Bugfix

  1. Fixed #393 修复 QMUIButton 在使用 Autolayout 布局时如果放在 UITableViewCell.contentView 的某个 subview 上时会出现的布局错乱的 bug。
  2. Fixed #398 修复 iOS 11 及以下在 setupNavigationItems 里将 leftBarButtonItem/rightBarButtonItem 置为 nil 会导致手势返回时 crash 的 bug。
  3. Fixed #400 修复 QMUIZoomImageView 在重复设置不同图片时可能导致图片不可见的 bug。
  4. Fixed #402 修复 QMUIZoomImageView 使用 initWithFrame: 初始化会死循环的 bug。

其他

  1. 优化 QMUIImagePickerPreviewViewController 从九宫格界面进入查看大图界面的速度。
  2. 优化 QMUIImagePickerPreviewViewController 左右切换查看 GIF 图时的卡顿。
  3. 相簿列表 QMUIAlbumViewController 对系统的隐藏相簿,不显示缩略图,以保护隐私。

关于项目信息统计

为了了解目前 QMUI iOS 的使用情况,我们在这个版本里加入了项目信息统计。在 DEBUG 模式下,应用启动的时候会将当前项目的 Bundle IdentifierDisplay Name,以及当前项目正在使用的 QMUIKit 的版本上报,Release 模式下不会执行统计代码,因此没有隐私、安全隐患。开发者也可以通过在配置表里新增:

QMUICMI.sendAnalyticsToQMUITeam = NO; // SendAnalyticsToQMUITeam : 是否允许在 DEBUG 模式下上报 Bundle Identifier 和 Display Name 给 QMUI 统计用

来关闭这个统计行为。

具体的统计源码请查看 QMUIConfiguration.m:73

2.7.6

29 Aug 09:46
Compare
Choose a tag to compare

新增功能

  1. QMUICommonDefines.h 增加宏 StatusBarHeightConstantNavigationContentTopConstant 用于某些无法动态获取系统 bar 高度的场景下的布局。
  2. QMUICommonDefines.h 增加 CGRectApplyAffineTransformWithAnchorPoint 用于弥补系统的 CGRectApplyAffineTransform 无法考虑 anchorPoint 的缺陷。
  3. UIView (QMUI) 增加属性 qmui_frameApplyTransform 用于弥补系统的 [UIView setFrame:] 无法在 view 本身已经被应用了 transform 后继续使用的缺陷。
  4. QMUIPieProgressView 增加 borderWidthborderInset 属性。
  5. 对以下几个常见的布局相关的方法增加 NaN 的保护,避免 Release 模式下出现非法数值导致 crash:
    5.1. - [UIView setFrame:]
    5.2. - [CALayer setBounds:]
    5.3. - [CALayer setPosition:]
  6. 对以下两个方法增加非法 NSIndexPath 的保护,避免 Release 模式下出现 crash:
    6.1. - [UICollectionView scrollToItemAtIndexPath:atScrollPosition:animated:]
    6.2. - [UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]
  7. QMUIOrderedDictionary 增加系列接口支持修改数据,具体请看头文件。

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

  1. 重构 QMUIPopupMenuView 组件,以协议的方式支持任意自定义的 item 类型。
  2. 重命名 NSObject (QMUI) 里与 ivarproperty 相关的方法,支持遍历继承自父类的成员变量和属性。
  3. 修改 QMUIMarqueeLabel 里两端的渐隐效果,改为用 mask 实现,因此相关接口也变了。

如何适配新版

  1. 请检查项目里所有使用 QMUIPopupMenuView 的地方,根据 Xcode 编译错误提示进行修改。
  2. 请检查项目里所有使用 qmui_enumrateInstanceMethodsqmui_enumrateIvars 的地方,按照 Xcode 编译错误提示改为新的命名。
  3. 搜索项目里用到 QMUIMarqueeLabel 的地方,删除对属性 fadeWidthfadeStartColorfadeEndColor 的使用。

Bugfix

修复以 storyboard 使用 QMUICommonTableViewController 时对 KVO 使用不当导致的 crash。
修复 QMUIPopupMenuItem 在没设置 imageimageMarginRight 依然会生效的问题。
修复 QMUIMarqueeLabelshouldFadeAtEdge = NO 后文字无法显示的 bug。
修复 QMUIButton 里对 imageView 使用不当导致 sizeThatFits: 返回结果可能不准确的 bug。
#387 去掉 QMUIButtonsetHighlighted:setEnabled: 时使用的动画。
Fixed #380 修复 QMUIImagePreviewViewControllerrect 方式预览后再以 fade 方式退出预览,此时再次进入预览,背景遮罩丢失的 bug。

2.7.5

06 Aug 06:50
Compare
Choose a tag to compare

新增功能

  1. 增加 CAAnimation (QMUI),支持以 block 的形式使用 CAAnimationDelegate,语法更便捷的同时,也可以避免 CAAnimation.delegatestrong 带来的内存管理的麻烦。
  2. QMUIMultipleDelegate 支持自动区分原 delegate 属性是 strongweak

Bugfix

  1. Fixed #375 修复 QMUIModalPresentationViewController 的遮罩在状态栏为来电状态时只盖住一部分的状态栏的问题。
  2. Fixed #377 修复 QMUITextFieldQMUITextViewmaximumTextLenght 在某些场景下会产生 crash。
  3. Fixed #378 修复 对 delegate 已有值的 object 打开 qmui_multipleDelegatesEnabled 会导致原来的值丢失的 bug。
  4. 修复配置表里的 NavBarButtonFont 对导航栏上的按钮的 highlighteddisabled 状态不生效的问题。

2.7.4

28 Jul 14:26
Compare
Choose a tag to compare
  1. Fixed #368 #372 修复 QMUIImagePreviewViewController 以 window 方式预览图片时,手势拖拽退出预览模式的各种 bug。
  2. Fixed #369 修复 QMUINavigationController 里由于对 weak 使用不当导致的 crash 的问题。
  3. Fixed #370 修复配置表里的 TableViewCellBackgroundColor 项无效的问题。
  4. Fixed #371 修复 QMUIToastViewPosition 没有适配 safeAreaInsets 的问题。
  5. 修复 QMUIDialogTextFieldViewController 某些 property 以 appearance 方式设置时无效的问题。

2.7.3

21 Jul 05:40
Compare
Choose a tag to compare

新增功能

  1. QMUIImagePreviewViewController 支持手势拖拽退出预览状态,同时优化了一些方法的命名。
  2. QMUIDialogViewController 增加属性 modalPresentationViewController 方便自定义,增加方法 - removeCancelButton- removeSubmitButton
  3. NSString (QMUI) 增加 - qmui_stringByReplacingPattern:withString: 方便使用正则表达式修改字符串。

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

  1. 重新整理了 QMUIDialogViewController 的代码,一些操作的执行时机与以前不同。

如何适配新版

  1. 全局搜索 startPreviewFromRectInScreen:,将其替换为 startPreviewFromRectInScreenCoordinate:
  2. 全局搜索 endPreviewToRectInScreen:,将其替换为 exitPreviewToRectInScreenCoordinate:
  3. 全局搜索 startPreviewFading:,将其替换为 startPreviewByFadeIn:
  4. 全局搜索 endPreviewFading:,将其替换为 exitPreviewByFadeOut:
  5. 全局搜索 QMUIZoomImageViewimageViewRectInZoomImageView,将其替换为 contentViewRectInZoomImageView

2.7.2

05 Jul 14:39
Compare
Choose a tag to compare

新增功能

  1. 新增 QMUIVisualEffectView,支持在前面盖一层颜色,方便实现某些设计需求。
  2. QMUIAlertController 增加属性 mainVisualEffectViewcancelButtonVisualEffectView,当你需要磨砂背景时,可以将一个 QMUIVisualEffectView 赋值给它们从而实现磨砂的效果。
  3. QMUIDialogViewController 增加属性 contentViewBackgroundColor 用于修改 contentView 的背景色。
  4. QMUIDialogTextFieldViewController 支持添加多个输入框,并增加 textFieldLabelMarginstextFieldMarginstextFieldHeighttextFieldSeparatorInsets 用于调整间距。
  5. QMUIDialogSelectionViewController 增加 rowHeight 属性方便统一控制弹窗里的每行高度。
  6. QMUIMultipleDelegates 增加方法 containsDelegate: 用于判断是否已经包含了某个 delegate。
  7. UIImage (QMUI) 增加方法 + qmui_imageWithSize:opaque:scale:actions: 用于快速绘制一张图。
  8. UIView(QMUI) 增加常量 QMUIViewSelfSizingHeight 用于快速完成 sizeThatFits:setFrame:,具体用法请搜索 QMUIKit 内使用到的地方。
  9. QMUIPopupMenuView 增加 itemConfigurationHandler 用于批量修改 item 的样式。
  10. UITableViewCell(QMUI) 增加属性 qmui_accessoryView 用于获取自定义或系统默认的 accessoryView,系统默认是无法获取到 accessoryType 产生的 view 的。
  11. QMUIImagePickerViewControllerDelegate 增加方法 imagePickerViewController:shouldCheckImageAtIndex: 用于控制是否能选中指定的图片,感谢 @fanxiangyang#352 下的建议。

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

  1. 重新整理了 QMUIDialogViewController 系列控件的样式代码,建议检查一遍业务里使用到的地方样式是否正确。
  2. UIImage(QMUI) qmui_imageResizedInLimitedSize 系列方法里的参数 contentMode 改为新增的 QMUIImageResizingMode 枚举类型。
  3. 优化某些命名,并修正了某些错误拼写。

如何适配新版

  1. 将所有用到 QMUIDialogTextFieldViewController 的地方改为新的添加输入框的方法。
  2. 全局搜索 qmui_imageResizedInLimitedSize,将用到参数 contentMode 的地方,类型改为新的 QMUIImageResizingMode
  3. 以 Starting 的方式全局搜索 QMUIBorderViewPosition,将其重命名为 QMUIViewBorderPosition
  4. 以 Containing 的方式全局搜索 qmui_seperator,将其替换为 qmui_separator
  5. 以 Containing 的方式全局搜索 alertSeperatorColor,将其替换为 alertSeparatorColor
  6. 以 Containing 的方式全局搜索 sheetSeperatorColor,将其替换为 sheetSeparatorColor

Bugfix

  1. Fixed #179 修复从 navigationBar 显示的界面手势返回到 navigationBar 隐藏的界面会出现内存泄露的问题。
  2. Fixed #351 修复 UINavigationController (NavigationBarTransition) 没有考虑 setViewControllers: 的问题。
  3. Fixed #357 修复把一个 QMUIMultipleDelegates 对象作为 delegate 时可能导致 respondsToSelector: 返回值错误的 bug。
  4. Fixed #358 修复 QMUIToastContentView 某些支持 appearance 的属性在以 appearance 方式修改后无法生效的 bug。
  5. Fixed #362 修复 QMUINavigationButton 内部对 navigationItem 混乱的保护可能产生 item 重复的 bug。
  6. 修复了重写 UINavigationController 的手势返回动画后可能发生的无法 push/pop 的 bug。
  7. 修复 QMUINavigationController 里某些 KVO 的使用可能引发的 crash。
  8. 修复配置表的 NavBarButtonFont 对导航栏上的 UIBarButtonItem 不生效的问题。
  9. 修复某些情况下重复调用 QMUIAlertControllerhide 方法会导致控件产生各种异常的问题。
  10. 修复 QMUIModalPresentationViewController 以 present 方式展示时,没有把所有生命周期都传递给 contentViewController 的 bug。

其他更新

  1. QMUICommonViewController 原本在 setupNavigationItems 里设置 navigationItem.titleView,现在改为在 didInitialize,以避免过于频繁的设置容易覆盖业务自定义代码的情况。

2.7.1

12 Jun 06:53
Compare
Choose a tag to compare

新增功能

  1. UIBarItem (QMUIBadge) 增加 qmui_badgeString 接口用于接受一个字符串来设置未读数。
  2. UIBarItem (QMUIBadge) 增加属性 qmui_badgeLabelqmui_updatesIndicatorView,方便使用。

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

  1. QMUIModalPresentationViewControllerupdateLayout 方法改为立即刷新布局,以前是在下一次 runloop 才会刷新。
  2. QMUIModalPresentationContentViewControllerProtocolpreferredContentSizeInModalPresentationViewController:limitSize: 增加参数 keyboardHeight 用于需要依赖键盘高度计算布局的场景。
  3. UIBarItem (QMUI)qmui_badgeValue 重命名为 qmui_badgeInteger
  4. + [QMUIKeyboardManager visiableKeyboardHeight] 重命名为 visibleKeyboardHeight,之前拼错了。
  5. QMUIPopupMenuItemhandler 增加参数 aMenuViewaItem,方便使用。

如何适配新版

  1. 由于 updateLayout 改为立即刷新,因此需要检查一下自己的浮层在显示/隐藏/键盘升起降下时动画是否正常。
  2. 全局搜索用到 preferredContentSizeInModalPresentationViewController:limitSize: 的地方,为其增加新参数 keyboardHeight:(CGFloat)keyboardHeight
  3. 全局搜索 qmui_badgeValue,将其替换为 qmui_badgeInteger
  4. 全局搜索 visiableKeyboardHeight,将其替换为 visibleKeyboardHeight
  5. 全局搜索 QMUIPopupMenuItem,为用到 hander 的地方增加2个新参数 (QMUIPopupMenuView *aMenuView, QMUIPopupItemView *aItemView)

Bugfix

  1. 修复 - [UIScrollView (QMUI) qmui_alreadyAtTop] 方法在内容不满一屏的时候对是否在顶部判断不准确的问题。
  2. 修复 QMUIModalPresentationViewController 里无法正确响应键盘 frame 变化事件,导致在键盘联想词那一栏显隐状态发生变化时产生布局问题的 bug。
  3. #348 修复 iOS 8,当已有一个输入框聚焦升起键盘后,聚焦到另一个输入框,不会触发键盘事件的系统 bug。
  4. #349 修复当项目里有超过一处使用了 QMUICellHeightKeyCache 后,会导致各种异常表现的 bug。

2.7.0

05 Jun 09:59
Compare
Choose a tag to compare

新增功能

  1. 增加 QMUIBadge 组件用于为 UIBarItem (包含 UIBarButtonItemUITabBarItem)显示未读数和未读红点,具体请看 UIBarItem+QMUIBadge.h 头文件的说明,相应地,QMUI Demo 里也增加了对应的 Demo 展示。目前业界常见的红点组件基本上对红点的设置时机都有要求,因为红点都是加到 [item valueForKey:@"view"] 里,但 UIBarButtonItem 只有在 UINavigationBar 可视后才能获取到 view 属性,所以用起来很麻烦。但 QMUIBadge 并没有这个限制,推荐使用。
  2. UIControl (QMUI) 增加 qmui_tapBlock 属性用于方便地添加事件,不用再去写 addTarget:action:forControlEvents: 了。
  3. QMUIAlertControllerDelegate 增加 shouldHideAlertController: 用于阻止 hide 操作。
  4. UICollectionView (QMUI) 增加 qmui_indexPathsForVisibleItems 用于获取按照大小排序后的 visible items,系统的 indexPathsForVisibleItems 返回的数组是无序的。
  5. NSObject (QMUI) 增加 qmui_enumrateIvarsXxxx 系列接口用于遍历某个 class 的成员变量,相应的,QMUI Demo 里的 NSObject (QMUI) 也可以搜索成员变量了。
  6. QMUICommonDefines.h 增加 CGSizeIsValidatedCGSizeIsNanCGSizeIsInf 函数用于判断非法的 CGSize 值。

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

  1. 废弃当初为了兼容 iOS 7 的 QMUIVisualEffectView,现在请使用系统自带的 UIVisualEffectView
  2. 将 QMUI 内多个地方使用的 didInitialized 重命名为 didInitialize,以保证更准确的表达,相应的,Code Snippets 也进行了更新。
  3. - [QMUIModalPresentationViewControllerDelegate requestHideAllModalPresentationViewController] 方法废弃,新增 QMUIModalPresentationComponentProtocol 协议用于代替被废弃的方法。
  4. QMUIModalPresentationViewController.maximumContentViewWidth 默认值改为 CGFLOAT_MAX,与常见的以 maximumXxx 风格命名的属性的默认值保持一致,如果业务里依赖于旧版本的默认值,则更新版本后,需要重新检查这些地方的浮层的布局是否正常。

如何适配新版

  1. 全局搜索 QMUIVisualEffectView,将使用的地方改为用 UIVisualEffectView
  2. 以 Starting With 模式全局搜索 didInitialized,将其替换为 didInitialize,如果你有使用 Code Snippets,也请一并更新。
  3. 全局搜索 requestHideAllModalPresentationViewController,将其改为用 QMUIModalPresentationComponentProtocol 协议(可能需要对该处声明为实现了 <QMUIModalPresentationComponentProtocol>)。
  4. 检查所有使用了 QMUIModalPresentationViewController 的地方,观察其在 iPad 等宽屏场景下布局是否正常,或者也可以直接用 [QMUIModalPresentationViewController appearance].maximumContentWidth = ([QMUIHelper screenSizeFor47Inch].width - UIEdgeInsetsGetHorizontalValue(appearance.contentViewMargins)); 来将默认值恢复到与上一个版本一致。
  5. 如果有使用配置表,请到 QMUIKit/QMUIConfigurationTemplate/QMUIConfigurationTemplate.m 里将 #pragma mark - QMUIBadge 那一段新增的配置复制到你的配置表里。

Bugfix

  1. Fixed #332 #344 QMUICommonViewController 里对 setupNavigationItemssetupToolbarItems 调用错误,上个版本的手误,终于改过来了🤪。
  2. Fixed #342 修复 QMUITextView 调用 initWithFrame: 初始化时,高度会强制被改为 0 的 bug。
  3. Fixed #335 修复当修改非 topViewControllerleftBarButtonItem 会影响 topViewController 自定义返回按钮的布局的 bug。另外,由于尚未有理想的自定义返回按钮解决方案,以及尚未遇到系统返回按钮无法实现的功能,因此自定义返回按钮功能可能会在后续的版本里被废弃,建议不要再使用。
  4. Fixed #346 修复为 UITextViewUITextField 打开 qmui_multipleDelegatesEnabled 后把输入框的 delegate 指向输入框自身时,会产生死循环的 bug。
  5. 修复 QMUIKeyboardManager 在 App 已经处于不活跃状态时依然接受键盘事件,容易导致业务布局混乱的问题。
  6. 修复 QMUIAlertController 连续调用两次 show 会导致产生一个无法消除的 window,影响 App 点击的 bug。
  7. 修复 QMUICommonTableViewController 里的 tableView.contentInset 变化时不会自动触发 emptyView 刷新布局的 bug。
  8. 修复 QMUIDialogSelectionViewControllersetItems: 后没有刷新布局的 bug。

其他修改

  1. 优化 QMUIEmptyView 里的 actionButton 按钮的高亮样式,以前通过 actionButtonTitleColor 属性设置按钮文字颜色时只设置了 UIControlStateNormal 状态的,所以点击时看不到变化。