腾讯 QMUI iOS UI 框架 2.9.3 版本发布

  

QMUI iOS 2.9.3 版本已发布,更新内容如下:

新增功能

  1. 增加 NSObject (QMUI_DataBind) 用于临时给 NSObject 添加一些信息,省去自定义 class 或者增加 property 的成本。

  2. UIViewController (QMUI) 增加 qmui_visibleState 用于获取当前 viewController 所处的生命周期阶段。

  3. UIViewController (QMUI) 增加 qmui_visibleStateDidChangeBlock 用于监听 qmui_visibleState 变化。

  4. UIViewController (QMUI) 增加 qmui_prefersStatusBarHidden 和 qmui_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 tableViewInitialContentInset 和 tableViewInitialScrollIndicatorInsets 属性。

  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. 修复 QMUIHelper 的 isNotchedScreensafeAreaInsetsForDeviceWithNotch 等于全面屏相关的接口在新 iPad Pro 上判断错误的 bug。

  8. 修复 QMUINavigationBarScrollingAnimator 和 QMUINavigationBarScrollingSnapAnimator 因浮点精度可能导致的样式错误。

  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 及以后的系统屏蔽补丁代码。

发行地址

QMUI iOS 是一个致力于提高项目 UI 开发效率的解决方案,其设计目的是用于辅助快速搭建一个具备基本设计还原效果的 iOS 项目,同时利用自身提供的丰富控件及兼容处理, 让开发者能专注于业务需求而无需耗费精力在基础代码的设计上。不管是新项目的创建,或是已有项目的维护,均可使开发效率和项目质量得到大幅度提升。

 

猜你喜欢

转载自www.oschina.net/news/103068/qmui-ios-2-9-3-released