3 回答

TA貢獻1815條經驗 獲得超6個贊
這樣寫確實可以修改 UINaigationBar 的高度,但存在一個問題,高度多出的部分會覆蓋 ViewController 的視圖(ViewController 在有導航欄的情況下視圖默認會向下便宜 44)。解決辦法是通過創建 UINaigationBar 的子類或 Category 重寫 - (CGSize)sizeThatFits:(CGSize)size ,這樣視圖會自動向下偏移合適的距離。

TA貢獻1856條經驗 獲得超5個贊
答案是可以修改的。
修改前:
修改后:
你新建一個工程,將UIWindow的rootViewController設置為一個UINavigationController的實列,然后自定義一個控制器CustomVC,在CustomVC中寫如下代碼:
- (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;
}
輸出結果:
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的高度已經從44變到了100. 如果還有疑問,請追問。沒有的話,請采納,謝謝!
- 3 回答
- 0 關注
- 1914 瀏覽
添加回答
舉報