我有一个父视图,我希望导航标题变大。然后,我推送一个带有分组表视图的子视图,并希望导航标题为inline
这在SwiftUI上运行得很好,但是当我的父级是带有prefersLargeTitles = true的UIViewController,并且我按下UIHostingController(rootView: ChildView())时,子目录中的导航栏标题会跳转
以下是预期行为(仅使用SwiftUI )

以下是从UIKit推送时的行为:

这是可以工作的SwiftUI代码
struct ParentView: View {
var body: some View {
NavigationView {
Text("SwiftUI")
.navigationBarItems(trailing: navigationButton)
.navigationBarTitle("SwiftUI Parent", displayMode: .large)
}
}
var navigationButton: some View {
NavigationLink(destination: ChildView()) {
Text("Push")
}
}
}
struct ChildView: View {
let list = ["One", "Two", "Three"]
var body: some View {
List(list, id: \.self, rowContent: Text.init)
.listStyle(GroupedListStyle())
.navigationBarTitle("SwiftUI Child", displayMode: .inline)
}
}
struct ChildView_Previews: PreviewProvider {
static var previews: some View {
ChildView()
}
}这就是我从UIKit推送SwiftUI子级的方法
class ParentViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.title = "UIKit Parent"
let barItem = UIBarButtonItem(title: "Push", style: .plain, target: self, action: #selector(pushChild))
navigationItem.rightBarButtonItem = barItem
view.backgroundColor = UIColor.systemBackground
navigationController?.navigationBar.prefersLargeTitles = true
}
@objc
func pushChild(_ sender: Any) {
let childViewController = UIHostingController(rootView: ChildView())
navigationController?.pushViewController(childViewController, animated: true)
}
}发布于 2020-04-17 16:13:55
在推送之前,将子视图控制器的navigationItem.largeTitleDisplayMode设置为.never (即使它是UIHostingController)。
func pushChild(_ sender: Any) {
let childViewController = UIHostingController(rootView: ChildView())
childViewController.navigationItem.largeTitleDisplayMode = .never
navigationController?.pushViewController(childViewController, animated: true)
}https://stackoverflow.com/questions/61265853
复制相似问题