3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
這樣寫(xiě)確實(shí)可以修改 UINaigationBar 的高度,但存在一個(gè)問(wèn)題,高度多出的部分會(huì)覆蓋 ViewController 的視圖(ViewController 在有導(dǎo)航欄的情況下視圖默認(rèn)會(huì)向下便宜 44)。解決辦法是通過(guò)創(chuàng)建 UINaigationBar 的子類(lèi)或 Category 重寫(xiě) - (CGSize)sizeThatFits:(CGSize)size ,這樣視圖會(huì)自動(dòng)向下偏移合適的距離。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
答案是可以修改的。
修改前:
修改后:
你新建一個(gè)工程,將UIWindow的rootViewController設(shè)置為一個(gè)UINavigationController的實(shí)列,然后自定義一個(gè)控制器CustomVC,在CustomVC中寫(xiě)如下代碼:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"修改前");
[self printViewHierarchy:self.navigationController.navigationBar];
//修改NavigaionBar的高度
self.navigationController.navigationBar.frame = CGRectMake(0, 20, 320, 100);
NSLog(@"\n修改后");
[self printViewHierarchy:self.navigationController.navigationBar];
}
- (void)printViewHierarchy:(UIView *)superView
{
static uint level = 0;
for(uint i = 0; i < level; i++){
printf("\t");
}
const char *className = NSStringFromClass([superView class]).UTF8String;
const char *frame = NSStringFromCGRect(superView.frame).UTF8String;
printf("%s:%s\n", className, frame);
++level;
for(UIView *view in superView.subviews){
[self printViewHierarchy:view];
}
--level;
}
輸出結(jié)果:
UINavigationBar:{{0, 20}, {320, 44}}
_UINavigationBarBackground:{{0, 0}, {320, 44}}
UIImageView:{{0, 44}, {320, 3}}
UINavigationItemView:{{160, 22}, {0, 0}}
2013-10-29 20:24:36.900 Nav[8957:907]
修改后
UINavigationBar:{{0, 20}, {320, 100}}
_UINavigationBarBackground:{{0, 0}, {320, 100}}
UIImageView:{{0, 100}, {320, 3}}
UINavigationItemView:{{160, 22}, {0, 0}}
可以看到UINaigationBar的高度已經(jīng)從44變到了100. 如果還有疑問(wèn),請(qǐng)追問(wèn)。沒(méi)有的話,請(qǐng)采納,謝謝!
- 3 回答
- 0 關(guān)注
- 1926 瀏覽
添加回答
舉報(bào)