今年6月份的WWDC大會(huì)已經(jīng)過去鳄虱,在此會(huì)上有眾多的新特性。這里強(qiáng)調(diào)說一下UINavigationBar
。
UINavigationBar相關(guān)
先說下效果,在用到下面兩個(gè)屬性時(shí)蕊连,導(dǎo)航條不再是64的高度,導(dǎo)航標(biāo)題也會(huì)變大游昼,文字靠左對(duì)齊甘苍,當(dāng)上下滑動(dòng)頁面時(shí),導(dǎo)航條的高度會(huì)進(jìn)行拉伸烘豌,文字也會(huì)縮放羊赵。
00.gif
- prefersLargeTitles
- largeTitleDisplayMode
用法:
self.navigationController.navigationBar.prefersLargeTitles = YES;
self.navigationItem.title = @"xxxx";
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
自定義UINavigationBar
相較于iOS11之前的版本,UINavigationBar
結(jié)構(gòu)上也與之前不同。如圖:
圖一 iOS11 later
圖二 iOS11 before
不難看出昧捷,原來的UINavigationItemView
被替換為_UINavigationBarContentView
如果直接初始化UINavigationBar
并添加在當(dāng)前ViewController上時(shí)就會(huì)出現(xiàn)圖三所示的情況,即:子控件的高度只有44罐寨。為了解決此問題靡挥,可以先繼承UINavigationBar
,然后再遍歷UINavigationBar
的子控件并修改Frame:
圖三
- (void)layoutSubviews {
[super layoutSubviews];
#if TARGET_OS_IOS
for (UIView *aView in self.subviews) {
if ([@[@"_UINavigationBarBackground", @"_UIBarBackground"] containsObject:NSStringFromClass([aView class])]) {
aView.frame = CGRectMake(0, -CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)+CGRectGetMinY(self.frame));
}
}
#endif
}
效果和iOS11之前一樣鸯绿,當(dāng)然這不是最優(yōu)方案跋破,過于簡單粗暴了點(diǎn)。
圖四
開發(fā)環(huán)境
- Xcode_9_beta_2