ios - 在推送过渡期间响应导航栏高度变化

标签 ios swift uinavigationcontroller uinavigationbar

iOS 11 中,将搜索栏添加到 navigationItem.titleView 时,搜索栏现在会将导航栏高度更改为 56dp/p>

我喜欢高度变化,不打算强制高度保持在 44dp 或更低。

不幸的是,当从一个 View Controller 转换到另一个 View Controller 时,将在绘制推送 View 时考虑较大的导航栏,然后在转换完成后更改栏高度。 看起来有点像这样:

enter image description here enter image description here

我需要一种方法让导航 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/

相关文章:

ios - "mutating sent to immutable object"在数组内的字典中

iphone - 结合 Objective-C 和 C++ 的正确方法?

ios - 使用 CoreData 快速保存分数

iOS 导航栏出现褪色

ios - 同时关闭两个 NavigationController

ios - XCTest 到 UILabel 文本存在的文本

ios - 类似于 MKNetworkKit 的 RestKit 可卡住操作

ios - 从 obj c 调用 swift

ios - Realm 关系的谓词,检查列表是否为空

ios - Swift - UINavigationBar 正在消失 - Storyboard 引用