有人能告诉我如何改变导航栏的高度吗?
以下是我目前所拥有的:
CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
有人能告诉我如何改变导航栏的高度吗?
以下是我目前所拥有的:
CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
UINavigationBar
的分类类:
.h 文件
#import UIKit/UIKit.h
@interface UINavigationBar (myNave)
- (CGSize)changeHeight:(CGSize)size;
@end
和 .m 文件
#import "UINavigationBar+customNav.h"
@implementation UINavigationBar (customNav)
- (CGSize)sizeThatFits:(CGSize)size {
CGSize newSize = CGSizeMake(320,100);
return newSize;
}
@end
它工作得非常好。
[self.navigationBar setTitleVeritcalPositionAdjustment:(float) forBarMetrics:UIBarMetricsDefault];
,其中float
是正值将标题向下推,负值将其向上推。因此,如果您的导航栏高度为44(默认值),并且您将其设置为60,则将float
设置为-8((60-44)/ 2)以重新居中它。 - Mr.P不应该改变导航栏的高度。来自苹果编程指南中的视图控制器:
自定义导航栏外观
在导航界面中,导航控制器拥有其UINavigationBar对象并负责管理它。不能直接更改导航栏对象或修改其边界、框架或alpha值。但是,有一些属性可以修改,包括以下内容:
● barStyle 属性
● translucent 属性
● tintColor 属性
-- 更新 -- IOS 7 ---仍然只能更改可用的属性,但以下是一个很好的教程,介绍如何实现导航栏的灵活性: http://www.appcoda.com/customize-navigation-status-bar-ios-7/
我已经解决了这个问题,我创建了UINavigationController的子类。在MainNavigationViewController.m文件中,我重写了viewDidLayoutSubviews()方法,在其中设置了self.navigationBar的框架。
sizeThatFits方法在iOS11中不再适用于UINavigationBar的子类。Apple工程师已经确认这一技术从未获得支持,并且随着iOS11的变化,sizeThatFits方法将不再被调用。
在视图控制器中覆盖-(void)viewWillAppear方法,尝试以下代码:
- (void)viewWillAppear {
UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
尝试使用 -
CGFloat navBarHeight = 10.0f;
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
@interface UINavigationBar (CustomHeight)
@end
@implementation UINavigationBar (CustomHeight)
- (CGSize)sizeThatFits:(CGSize)size {
CGRect screenRect = [[UIScreen mainScreen] bounds];
return CGSizeMake(screenRect.size.width, kNavBarHeightNoStatus);
}
@end
knavBarHeightNoStatus是您导航栏的高度。我们使用UIScreen边界,因为UINavigationBar的框架是错误的。
PS:注意,如果与SideMenu一起使用可能会出现一些问题。
self.navigationController.navigationBar.frame
是iOS 4.x版本上的一个只读
属性。即使在状态异常的情况下,它也会改变。
例如,当应用程序的状态更改为后台并返回前台时,导航栏将显示原始高度。
viewDidLoad
中调用 `self.navigationController.navigationBar` 的 setHeight:
方法。看起来很好!以下代码不会影响除高度以外的框架中的其他参数
[self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, 150)];