1. 程式人生 > >騰訊 QMUI iOS UI 框架 2.9.3 版本釋出

騰訊 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 專案,同時利用自身提供的豐富控制元件及相容處理, 讓開發者能專注於業務需求而無需耗費精力在基礎程式碼的設計上。不管是新專案的建立,或是已有專案的維護,均可使開發效率和專案質量得到大幅度提升。