在 iOS 11 中,当向 navigationItem.titleView <添加搜索栏时,搜索栏现在会将导航栏高度更改为 56dp / p>
我喜欢身高变化,并不打算强迫身高保持 44dp 或更低。
不幸的是,当从一个视图控制器转换到另一个视图控制器时,将使用更大的导航栏绘制推出的视图,然后在转换完成后更改条形高度。 看起来有点像这样:
我需要一种方法让导航控制器识别过渡期间的高度变化,以便它可以设置为较小尺寸的动画并正确绘制视图。
我有一个我不喜欢的当前修复,因为它有点跳跃,这是应用程序必须做的更多工作,并且它必须重新评估它的视图,无论它被推出哪个视图控制器。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 11, *) {
navigationController?.view.layoutSubviews()
}
}
到目前为止,我还没有发现任何关于堆栈溢出的问题,WWDC的任何评论以及官方苹果文档中的任何内容。 我见过很多应用程序处理这个问题。苹果联系人应用程序将创建看起来像两个导航栏,并将在它们之间移动而不动画高度变化和fb messenger应用程序将完美地在高度之间转换,甚至允许交互式弹出过渡。
答案 0 :(得分:3)
使用此功能,可以保持搜索栏的高度不变
if #available(iOS 11.0, *) {
searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
}
答案 1 :(得分:1)
我尝试了很多不同的功能。 这是唯一真正有用的东西
OBJ C:
if (@available(iOS 11, *)) {
self.navigationController.view.layoutSubviews;
}
SWIFT:
if #available(iOS 11, *) {
self.navigationController.view.layoutSubviews()
}