iOS11自定义导航栏高度

时间:2017-08-24 08:21:27

标签: ios objective-c uinavigationbar ios11

首先,感谢您来到这里并帮助解决我的问题。谢谢!!!

在iOS11 beta6中,sizeThatFits:似乎无法在UINavigationBar上运行。我注意到通过显示我的应用程序已经改变了UINavigationBar结构。

我尽力改变自定义导航栏的高度。但似乎总是44,它在iOS11之前有效。

- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(self.frame.size.width, 64);
    return newSize;
}

enter image description here

奇怪的是,我只是在didMoveToSuperview方法中记录它的帧,它的高度是64,但我真的看到在Reveal和app中它是44。

我对此一无所知......请帮帮我..谢谢。

更新

我发现关于我的自定义导航栏LayoutConstraints登录控制台如下:

"<NSAutoresizingMaskLayoutConstraint:0x604000495ae0 FDCustomNavigationBar:0x7fe2f01399d0.(null) == 42>",
"<NSAutoresizingMaskLayoutConstraint:0x604000495b30 FDCustomNavigationBar:0x7fe2f01399d0.height == 44>"`

bug我甚至没有在导航栏中使用自动布局。怎么了?

更新8/28:

enter image description here

我在导航栏的- layoutSubviews方法中设置了自定义导航栏的子视图框架。

- (void)layoutSubviews {
    [super layoutSubviews];

    self.frame = CGRectMake(0, 0, CGRectGetWidth(self.frame), 64);

    for (UIView *view in self.subviews) {

        if([NSStringFromClass([view class]) containsString:@"Background"]) {
            view.frame = self.bounds;
        } else if ([NSStringFromClass([view class]) containsString:@"ContentView"]) {
            CGRect frame = view.frame;
            frame.origin.y = 20;
            frame.size.height = self.bounds.size.height - frame.origin.y;
            view.frame = frame;
        }
    }
}

但导航栏将覆盖视图控制器的视图。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:9)

由于iOS 11 UINavigationBar完全支持自动布局(这就是您查看其约束的原因)。我已经向Apple打开了一个雷达,因为我认为为titleView设置一个高度限制会相应地调整导航栏的高度。然而,这就是Apple回复的内容:

  

完全支持自动布局并不意味着您的视图会影响导航栏布局的其他方面 - 特别是导航栏会强制执行自己的高度,并且不允许标题视图或其他自定义视图超出导航栏的高度。我们将继续处理此问题,并会再次与您联系。

截至今天,雷达仍处于打开状态。

答案 1 :(得分:0)

您好我刚刚遇到过同样的问题。

现在,在iOS 11上不推荐使用顶级布局指南。您必须在约束中引用safeAreaLayoutGuide。

这是swift

中的一个例子
: n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)

正如您所看到的,您的观点的顶部锚点应该与safeAreaLayoutGuide顶部锚点相匹配。在这个例子中,我使用变量height来创建新约束。变量height包含导航栏高度减去常量。

您应该尝试更改高度值。

希望这会对你有所帮助。