iOS 16导航栏设置大标题并隐藏行内标题。

5

在检查我们的iOS 16应用程序中的错误时,我们发现NavigationBar的行为会改变,即使在非14 Pro型号上也是如此。有多个问题,我们在想如何修复它们。所有问题都没有更改代码。只是在iOS 16上运行应用程序。

  1. 在某些视图上,iOS将标题样式更改为“大”字体。它过去曾是并且应该是内联的。
  2. 在某些视图上,当推送动画结束后,标题样式会从内联更改为大字体。这会导致UI跳跃。在其他视图上,标题会完全消失。
  3. 在某些视图上,标题正确地处于内联状态,但显示表单并将其解除后,标题会从NavigationBar完全消失。

我们使用UIHostingControllers来包装所有我们的SwiftUI视图。也许这里有一些问题。

1个回答

2

看起来 UIHostingController 和 SwiftUI 在 iOS 16 上有些冲突。iOS 在为 ViewController 设置属性时会混淆,因为这些属性也可以通过 SwiftUI 设置。请尝试在您放入 HostingController 的根 SwiftUI 视图中设置标题和标题样式:

var body: some View {
    yourContentViewsHere
        .navigationTitle("NavBar title")
        .navigationBarTitleDisplayMode(.inline)
}

这个修复程序应该解决问题中的所有问题。


是的,这很奇怪,如果您将navigationTitle和Displaymode放在ZStack上,它可以正常工作,但如果我将其放在scrollView上,则无法正常工作。 - saro
因此,当在UINavigationControllers中推送UIHostingControllers时,我们现在必须在两个位置设置标题和标题显示模式:首先,我们必须配置UIHostingController的navigationItem.title和navigationItem.largeTitleDisplayMode,以确保VC被推送时样式立即更改。然后,我们必须配置封装的SwiftUI视图的.navigationTitle和.navigationBarTitleDisplayMode,以防止在iOS 16中视图出现后样式发生变化。 - rberggreen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接