在iOS 7中,如何将UINavigationBar的高度从64点更改为44点?

在iOS 7中,如何将UINavigationBar的高度从64点更改为44点?,ios,ios7,uinavigationcontroller,uinavigationbar,Ios,Ios7,Uinavigationcontroller,Uinavigationbar,在iOS 7中,UINavigationController中的UINavigationBar的高度扩展到64点,这样它就可以位于状态栏的下方。如何将高度更改为44点 以下是它当前的外观: 换句话说:如何防止UINavigationBar在状态栏下方加上标签 正如Jared Sinclair在本文中指出的(见第4点): UINavigationController将其UINavigationBar的高度更改为44点或64点,这取决于一组非常奇怪且未记录的约束。如果UINavigationCont

在iOS 7中,
UINavigationController
中的
UINavigationBar
的高度扩展到64点,这样它就可以位于状态栏的下方。如何将高度更改为44点

以下是它当前的外观:


换句话说:如何防止
UINavigationBar
在状态栏下方加上标签

正如Jared Sinclair在本文中指出的(见第4点):

UINavigationController将其UINavigationBar的高度更改为44点或64点,这取决于一组非常奇怪且未记录的约束。如果UINavigationController检测到其视图框架的顶部在视觉上与其UIWindow的顶部相邻,则它将以64点的高度绘制其导航栏。如果其视图的顶部与UIWindow的顶部不相邻(即使仅关闭一个点),则它将以“传统”方式绘制其导航栏,高度为44点。此逻辑由UINavigationController执行,即使它是应用程序的视图控制器层次结构中的几个子级。没有办法阻止这种行为

使用自动布局,我能够在我的
UINavigationController
UINavigationBar
上获得44个点的高度,方法是首先设置
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点):

您可以设置y位置