如何在 iOS 7 中将 UINavigationBar 高度的高度从 64 点更改为 44 点?
Posted
技术标签:
【中文标题】如何在 iOS 7 中将 UINavigationBar 高度的高度从 64 点更改为 44 点?【英文标题】:How can I change the height of a UINavigationBar height from 64 to 44 points in iOS 7? 【发布时间】:2014-01-06 20:04:26 【问题描述】:在 ios 7 中,UINavigationBar
在 UINavigationController
中的高度扩展到 64 磅,这样它就可以在状态栏下方重叠。如何将高度更改为 44 点?
这是目前的样子:
【问题讨论】:
你可以设置y位置 【参考方案1】:换句话说:如何防止UINavigationBar
覆盖状态栏?
正如 Jared Sinclair 在blog post 中所述(参见第 4 点):
UINavigationController 将根据一组相当奇怪且未记录的约束将其 UINavigationBar 的高度更改为 44 点或 64 点。如果 UINavigationController 检测到其视图框架的顶部与其 UIWindow 的顶部在视觉上是连续的,则它会绘制高度为 64 磅的导航栏。如果其视图的顶部与 UIWindow 的顶部不连续(即使仅相差一个点),则它以“传统”方式绘制其导航栏,高度为 44 点。这个逻辑由 UINavigationController 执行,即使它是应用程序的视图控制器层次结构中的几个子级。没有办法阻止这种行为。
使用自动布局,通过最初设置UINavigationController
的视图框架使其不与窗口的最佳。下面是一些示例代码:
- (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 磅):
【讨论】:
以上是关于如何在 iOS 7 中将 UINavigationBar 高度的高度从 64 点更改为 44 点?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 7 中将 UITableView 添加到 UIAlertView