[英]How can I change the height of a UINavigationBar height from 64 to 44 points in iOS 7?
在iOS 7中, UINavigationBar
中的UINavigationController
的高度扩展到64点,因此它可以覆盖状态栏。 如何将高度更改为44点?
这是当前的样子:
换句话说:如何防止UINavigationBar
重叠状态栏?
正如贾里德·辛克莱尔(Jared Sinclair)在此博客文章中指出的(请参阅第4点):
UINavigationController会将其UINavigationBar的高度更改为44点或64点,具体取决于一组相当奇怪且未记录的约束。 如果UINavigationController检测到其视图框架的顶部在视觉上与其UIWindow的顶部连续,则它将绘制高度为64点的导航栏。 如果其视图的顶部与UIWindow的顶部不连续(即使仅偏离一点),则它以“传统”方式绘制其导航栏,高度为44磅。 此逻辑由UINavigationController执行,即使它在应用程序的视图控制器层次结构中位于多个子级之下。 没有办法防止这种行为。
使用自动布局,通过最初设置UINavigationController
的视图框架使其不与窗口的顶部UINavigationController
,我可以在UINavigationController
的UINavigationBar
上获得44点的高度。 这是一些示例代码:
- (void)viewDidLoad {
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor whiteColor];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
navigationController.view.frameHeight = [UIApplication sharedApplication].keyWindow.frameHeight - 20;
navigationController.view.frameY = 20;
[self addnavigationController:navigationController];
[self.view addSubview:navigationController.view];
[navigationController didMoveToParentViewController:self];
// Set the frame initially so that the top of the UINavigationController's view doesn't line up with the top of the UIWindow's view
navigationController.view.frame = (CGRect) {
.origin.x = navigationController.view.frame.origin.x,
.origin.y = 20,
.size.width = navigationController.view.frame.size.width,
.size.height = [UIApplication sharedApplication].keyWindow.frameHeight - 20
};
}
- (void)updateViewConstraints
{
// Set your actual constraints here
}
结果如下所示(注意UINavigationBar
的高度是44点如何):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.