在 iOS 11 中,将搜索栏添加到 navigationItem.titleView 时,搜索栏现在会将导航栏高度更改为 56dp/p>
我喜欢高度变化,不打算强制高度保持在 44dp 或更低。
不幸的是,当从一个 View Controller 转换到另一个 View Controller 时,将在绘制推送 View 时考虑较大的导航栏,然后在转换完成后更改栏高度。 看起来有点像这样:
我需要一种方法让导航 Controller 识别过渡期间的高度变化,以便它可以动画到较小的尺寸并正确绘制 View 。
我有一个我不喜欢的当前修复程序,因为它有点不稳定,而且应用程序必须做更多的工作,而且无论它是从哪个 View Controller 推送的,它都必须重新评估它的 View 。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 11, *) {
navigationController?.view.layoutSubviews()
}
}
到目前为止,我还没有发现任何关于堆栈溢出的类似问题,WWDC 的任何评论以及苹果官方文档中的任何内容。 然而,我已经看到许多应用程序处理这个问题。 Apple 通讯录应用程序将创建看起来像两个导航栏的东西,并会在它们之间移动而不会对高度变化进行动画处理,而 fb Messenger 应用程序将在高度之间完美过渡,甚至允许交互式弹出过渡。
最佳答案
使用这个,它会保持你的搜索栏的高度固定
if #available(iOS 11.0, *) {
searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
}
关于ios - 在推送过渡期间响应导航栏高度变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48414837/