今年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