UIKit‘s Bars 的新特性
1. 讓我們先來看看橫豎屏新版 Files App UI 上變化
Original | Mark |
---|---|
image.png
|
image.png
|
image.png
|
image.png
|
- 豎屏的時候,有一個大標題,同時嵌入 searchBar 的布局,當界面向上滑動后標題會回到原來的UI效果。
- 橫屏的時候,底部tabbar的 icon 和字體會變小,且并排;大標題的位置和大小,相對于豎屏也發(fā)生相應(yīng)的變化。
總的來說,豎屏下內(nèi)容意圖清晰,橫屏下縱向空間變大了。但同樣引發(fā)了一個問題,就是橫屏下的 TabBar 圖標和字體都變小了,如果你想看清楚這些圖標和文字怎么辦呢?
方法是長按tabbar 上的 Item。效果如下圖:
2. UITabBarItem 新功能
UIBarItem 是 UITabBarItem,UIBarButtonItem 的父類,以上功能(tabbar icon 圖變小,長按顯示 HUD Item 大圖標)都在 這個類上做了擴展。
- 自定義橫屏標簽的 icon 圖片
UIBarItem.landscapeImagePhone
- 自定義長按 Item 在 HUD 上顯示設(shè)定的大圖標圖片
UIBarItem.largeContentSizeImage
還有就是,如果你存放在Asset.xcassets文件內(nèi)的 Icon 圖是 PDF 格式的話,你可以在該圖片的屬性設(shè)置欄中選中 Resizing(Preserve Vector Data 保存矢量數(shù)據(jù)),系統(tǒng)會自動提取該數(shù)據(jù),自動調(diào)整大小然后顯示到HUD 中。
如果想了解更多的輔助功能,可以參考WWDC2017 Session 215:What's New in Accessibility。
3. UINavigationBar 怎樣顯示大標題
- UINavigationBar的新屬性,設(shè)置為 true 即可讓整個App里的UINavigationBar的Title變大
navigationBar.prefersLargeTitles = true
- 自定控制器UINavigationBar的Title顯示模式
navigationItem.largeTitleDisplayMode
相關(guān)模式有:
typedef NS_ENUM(NSInteger, UINavigationItemLargeTitleDisplayMode) {
/// 自動模式依賴上一個 item 的特性
UINavigationItemLargeTitleDisplayModeAutomatic,
/// 針對當前 item 總是啟用大標題特性
UINavigationItemLargeTitleDisplayModeAlways,
/// 針對當前 item 總是不啟動啟用大標題特性
UINavigationItemLargeTitleDisplayModeNever,
}
Demo 演示:
1.在主控制器上設(shè)置顯示大標題后,后續(xù)所有 push 進來的下級控制器都會帶有大標題效果
未設(shè)置 | navigationBar.prefersLargeTitles = true | 詳情控制器 |
---|---|---|
image.png
|
image.png
|
image.png
|
- 在詳情控制器設(shè)置大標題顯示模式為 Never
未設(shè)置 | navigationItem.largeTitleDisplayMode = Never |
---|---|
image.png
|
image.png
|
4. 將 UISearchController 集成到 Navigation (NavigationItem 新特性)
- 只需將你的 UISearchController 賦值到NavigationItem的 searchController 屬性即可。
navigationItem.searchController
- 同時滾動時候?qū)?SearchBar 的位置控制都由這個 BOOL 屬性決定,默認值是 True,為 true 時候會隨著界面的滑動而移動,反之則固定位置不變。(可在系統(tǒng)郵件 App 里看到其 searchBar 是移動的當發(fā)生滾動時,而在 files app 則是固定的,因為該屬性值為 false)
navigationItem.hidesSearchBarWhenScrolling
注意
滾動的時候,以下交互操作都是由 UINavigationController 負責調(diào)動的:
- UIsearchController 搜索框效果更新
- Refresh controlling 大標題效果的控制
- Rubber banding 效果 //當你開始往下拉,大標題會變大并隨著滾動條移動
所以,如果你自定義 navigation bar,你也會失去 searchController的集成、大標題的控制更新和Rubber banding效果,因為這些都是由UINavigationController 控制的。
Demo 演示:
嵌入 searchController 到 Navigation 內(nèi)效果:
默認開始是不顯示 searchController ,當下拉時候才會顯示,之后會一直顯示。
5. UIToolbar 和 UINavigationBar 的 Layout 新特性
- 針對 UIToolbar 和 UINavigaBar 自動布局擴展支持
- 自定義的bar button items、自定義的title view 都可以通過 layout 來表示尺寸(你需要在你自定義的 view 內(nèi)設(shè)置constraints,所以如果你自定義了title view,你需要確保任何約束只依賴于標題視圖及其內(nèi)部的子視圖)
- 當你使用上述 layout 特新布局,系統(tǒng)將會把布局權(quán)限移交給你。
- 避免 Zero-Sized的自定義視圖
自定義視圖的size為0是因為你有一些模糊的約束布局。要避免視圖尺寸為0,可以從以下方面做:- UINavigationBar 和 UIToolbar 提供位置
- 開發(fā)者則必須提供視圖的size,有三種方式:
- 對寬度和高度的約束;
- 實現(xiàn) intrinsicContentSize;
- 通過約束關(guān)聯(lián)你的子視圖;
ps: 本來還想繼續(xù)分析接下來的內(nèi)容,無奈發(fā)現(xiàn)后面的知識點自己本身理解上還是有些誤差的,所以就將本次分享分 part 處理了~~~(>_<)~~~。