Skip to content

2.1.0

Compare
Choose a tag to compare
@MoLice MoLice released this 04 Dec 14:36
· 392 commits to master since this release

本次版本更新的主要内容是适配 iOS 11,由于距离上个版本已有一个月之久,因此本次版本更新内容较多,请耐心看完。如果想直接查看本次 QMUI 更新要做的兼容修改,请直接跳到文章尾部的 更新指南

更新点(按模块列出)

AssetLibrary

  1. 相册控件 QMUIAsset 增加判断系统新增的 HEIC 格式资源的方式。
  2. 相册控件支持展示 GIF。
  3. 优化相册控件的默认样式,对齐 iOS 11 系统风格。

QMUIAlertController

  1. QMUIAlertController 增加 addCancelAction 方法用于便捷地添加一个取消按钮。
  2. QMUIAlertController 增加 isExtendBottomLayout 属性用于控制是否需要在 iPhone X 上自动延伸底部的背景色,如果你的 alertController 样式是撑满屏幕宽度的,则建议使用这个属性,如果是类似系统那种悬浮不贴边的,则不需要。

QMUIButton

  1. 修复 QMUIButton 使用了 adjustsImageTintColorAutomatically 之后修改 tintColor,再设置不同的 UIControlStateNormal image,会导致 highlighted 时又看到旧的 UIControlStateNormal image。
  2. 修复当使用 xib / storyboard 时,QMUIButtonQMUILabel 的大小展示错误的 bug(详见 #228)。
  3. UIButton (QMUI)initWithImage:title: 方法重命名为更标准的 qmui_initWithImage:title:

QMUIModalPresentationViewController

  1. 增加方法 updateLayout 用于手动触发 modalPresentationViewController 去更新浮层的布局。
  2. 增加 3 个属性 shownInWindowModeshownInPresentedModeshownInSubviewMode 用于区分当前是以哪种方式显示的。
  3. UIViewController (QMUIModalPresentationViewController). modalPresentedViewController 重命名为更符合规范的 qmui_modalPresentationViewController

QMUIMoreOperationController

QMUIMoreOperationController 在本次版本进行了重构,改动较大,请到 Wiki 查看详细修改及适配方法。

QMUINavigationTitleView

  1. 修复 QMUINavigationTitleView 在做 accessoryView 动画的过程中修改 title 文字时,布局无法被刷新的问题。

QMUIPopupContainerView

  1. 增加 willShowBlock 用于在即将显示浮层时做一些事情。
  2. willHideBlock 增加参数 animated 用于区分是否以动画的方式隐藏。

QMUITextView

  1. QMUITextView 增加 canPerformPasteActionBlockpasteBlock 用于实现自定义的粘贴行为。

QMUICommonDefines

  1. 将宏 IOS_VERSION 的数据类型从 floatValue 改为 doubleValue,避免一些数据类型不匹配导致的运算错误。
  2. 增加打不同级别的 log 的宏 QMUILogInfoQMUILogWarn,可通过配置表里的对应开关来控制某个级别的 log 是否要输出。

QMUIHelper

  1. 增加 QMUIHelper (SystemVersion) 用于精准判断不同的系统版本之间的高低,之前用宏 IOS_VERSION 的方式无法区分 “10.3.1” 和 “10.3.2” 的大小。
  2. QMUIHelper (DynamicType) 增加方法 + safeAreaInsetsForIPhoneX 用于获取 iPhone X 新增的那些安全区域的值。

NSArray (QMUI)

  1. 增加 qmui_enumerateNestedArrayWithBlock: 用于将多维数组打平成一维数组遍历。

NSString (QMUI)

  1. 废弃 qmui_includesString: 方法,请使用 iOS 8 系统自带的 containsString: 代替。
  2. 修复 qmui_lengthWhenCountingNonASCIICharacterAsTwo 在小字节序端下对一些字符的长度判断不准确的bug(详见 #245)。

UIScrollView (QMUI)

  1. 增加属性 qmui_contentInset 用于兼容不同版本的 contentInsetadjustedContentInset 的使用。

UISearchBar (QMUI)

由于 iOS 11 新增了以 navigationItem.searchController 方式使用 UISearchBar 的途径,所以导致原本以 tableHeaderView = searchBar 方式使用的情况下,搜索框的样式会有较多问题,因此这个版本里做了较多兼容适配(详见 #233)。

  1. 增加属性 qmui_usedAsTableHeaderView 给业务告诉 QMUI 当前的使用方式是否是 tableHeaderView,仅在该值为 YES 的情况下才会自动做兼容。
  2. 增加属性 qmui_textFieldMargins 用于在系统的布局结果上调整输入框的布局。
  3. 增加属性 qmui_cancelButton 用于获取搜索框里的取消按钮。
  4. 增加属性 qmui_segmentedControl  用于获取 scopeBar 里的 UISegmentedControl

UITabBar (QMUI)

  1. 修复 iOS 11.2 以前的版本在界面 push 时,tabBar 会跳动的问题(详见 #217)。
  2. 修复 iOS 11 里 UITabBar 在某些情况下无法让 UIScrollView 自动调整 contentInset.bottom 的问题(详见 #218)。

UITableView

  1. 配置表增加开关 tableViewEstimatedHeightEnabled 用于控制全局的 UITableView 默认是否要启用 estimatedHeight 功能(iOS 11 下,UIKit 默认会打开它,但会影响很多其他功能的使用,例如 contentOffsetcontentSize 的计算等,所以增加一个开关方便全局关闭掉)。
  2. UITableView (QMUI) 增加属性 qmui_indexForVisibleSectionHeaders 用于获取可视范围内的 sectionHeader。
  3. UITableView (QMUI) 增加属性 qmui_indexOfPinnedSectionHeader 用于获取当前正处于停靠状态的 sectionHeader 的 index。
  4. UITableView (QMUI) 增加方法 qmui_isHeaderPinnedForSection: 用于判断指定的 sectionHeader 是否处于停靠状态。
  5. 修复在 iPhone X 横屏下使用 QMUICellHeightCache 提供的 cell 高度计算和缓存功能时,由于无法感知到列表 safeAreaInsets 的变化导致高度计算错误的问题。

UIView (QMUI)

  1. 增加属性 qmui_safeAreaInsets 用于兼容不同 iOS 版本下对 safeAreaInsets 的调用。
  2. 在调用 convertPointconvertRect 系列方法时,对转换坐标的两个 view 是否存在共同父 view 做检测,如果不存在则打印 log 提醒(详见 #230)。

更新指南

配置表

如果有使用配置表,请打开业务项目的 QMUIConfigurationTemplate.m,执行以下修改:

  1. 增加开关 tableViewEstimatedHeightEnabled 用于控制 UITableViewestimatedHeight 特性,默认值为 YES
  2. 增加 QMUILog 的 3 个开关:shouldPrintDefaultLogshouldPrintInfoLogshouldPrintWarnLog,用于控制 QMUI 内部不同级别的 log 是否要输出,默认值为 YES
  3. 增加 shouldFixTabBarTransitionBugInIPhoneX 用于自动修复 iOS 11.2 以前的系统 bug(详见 #217),默认值为 NO

你也可以直接复制以下代码到你的配置表里。

QMUICMI.tableViewEstimatedHeightEnabled = YES;                              // TableViewEstimatedHeightEnabled : 是否要开启全局 UITableView 的 estimatedRow(Section/Footer)Height
QMUICMI.shouldPrintDefaultLog = YES;                                        // ShouldPrintDefaultLog : 是否允许输出 QMUILogLevelDefault 级别的 log
QMUICMI.shouldPrintInfoLog = YES;                                           // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelInfo 级别的 log
QMUICMI.shouldPrintWarnLog = YES;                                           // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelWarn 级别的 log
QMUICMI.shouldFixTabBarTransitionBugInIPhoneX = NO;                         // ShouldFixTabBarTransitionBugInIPhoneX : 是否需要自动修复 iOS 11 下,iPhone X 的设备在 push 界面时,tabBar 会瞬间往上跳的 bug

QMUIMoreOperationController

本次更新重构了这个控件,适配指南请查看 Wiki

其他

  1. 全局搜索 .modalPresentedViewController,将其重命名为 .qmui_modalPresentationViewController
  2. 为所有 QMUIPopupContainerView.willHideBlock 增加第二个参数 BOOL animated
  3. 将所有用到 UIButton (QMUI) initWithImage:title: 方法重命名为 qmui_initWithImage:title:
  4. 全局搜索 qmui_includesString:,将其替换为 containsString: