騰訊 QMUI iOS UI 框架 2.9.3 版本釋出
QMUI iOS 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。
其他
更新
[QMUIHelper isHighPerformanceDevice]
方法的判斷,iPad Air 2 及以上、iPhone 8 及以上都認為是高效能裝置。#410 #422 這兩個系統 bug 實測在 iOS 12.1.1 裡已被修復,因此 QMUI 2.9.3 版本里已對 12.1.1 及以後的系統遮蔽補丁程式碼。
QMUI iOS 是一個致力於提高專案 UI 開發效率的解決方案,其設計目的是用於輔助快速搭建一個具備基本設計還原效果的 iOS 專案,同時利用自身提供的豐富控制元件及相容處理, 讓開發者能專注於業務需求而無需耗費精力在基礎程式碼的設計上。不管是新專案的建立,或是已有專案的維護,均可使開發效率和專案質量得到大幅度提升。