iOS11自定义导航栏高度

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

在iOS11 beta6中, sizeThatFits:似乎不适用于UINavigationBar。 我注意到,UINavigationBar结构已经改变了显示我的应用程序。

我尽力改变自定义导航栏的高度。 但它似乎一直是44 ,而且它在iOS11之前工作。

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

在这里输入图像说明

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

我不知道这个…请帮助我..谢谢。

更新:

我发现关于我的自定义导航栏LayoutConstraintslogin控制台是这样的:

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

错误我甚至没有使用自动布局在我的导航栏。 它出什么问题了?

8/28更新:

在这里输入图像说明

我已经在导航栏的- 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; } } } 

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

由于iOS 11的UINavigationBar完全支持自动布局(这是你看到它的限制的原因)。 我已经向苹果公司开放了一个雷达,因为我认为为titleView设置一个高度限制会相应地调整导航栏的高度。 不过这是苹果回答的:

完全支持自动布局并不意味着您的视图可以影响导航栏布局的其他方面 – 特别是,导航栏强制自己的高度,并且不允许标题视图或其他自定义视图的高度超过导航栏。 我们正在继续研究这个问题,并会再次跟进。

截至今天,雷达仍然是开放的。

你好,我刚刚经历了同样的问题。

现在,顶层布局指南已在iOS 11上被弃用。您必须在约束中引用safeAreaLayoutGuide。

这是一个快速的例子

  if #available(iOS 11, *) { let guide = self.view.safeAreaLayoutGuide.topAnchor let height = (self.navigationController?.navigationBar.frame.height)! - CGFloat(12) NSLayoutConstraint.activate([ self.yourTableView.topAnchor.constraint(equalTo: guide, constant: height) ]) } 

正如你可以看到你的视图的顶部锚点应该匹配safeAreaLayoutGuide顶部锚点。 在这个例子中,我使用variablesheight来创build新的约束。 可变高度包含导航栏高度减去一个常数。

您应该尝试通过更改高度值。

希望这可以帮助你。