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/

相关文章:

iphone - PushViewController 导航到下一个堆栈

ios - 在原始 iOS App 和 App Extension 之间共享代码

ios - Xamarin.iOS/Akavache - 使用自定义 EncryptionProvider 的加密缓存

ios - 根据内容调整 uiscrollview 的大小

ios - 调用 popToViewController 的正确方法 - iOS

ios - 自定义导航栏中返回图标和文本的间距和格式

ios - 如何使用 CrossDissolve 幻灯片过渡动画标签栏选项卡切换?

iphone - XMPP 框架接收的最大消息数

arrays - 在 swift 中用类实例填充数组时出错

swift - 解析 REST API key 破坏客户端 key 身份验证