У меня есть родительское представление, где я хочу, чтобы заголовок навигации был большим. Затем я пу sh дочерний вид с сгруппированным табличным представлением, и я хочу, чтобы заголовок навигации был inline
:
Это хорошо работает с SwiftUI, но когда мой родитель является UIViewController с prefersLargeTitles = true
, и я pu sh a UIHostingController(rootView: ChildView())
заголовок панели навигации в дочернем элементе прыгает
Вот ожидаемое поведение (только с использованием SwiftUI)
![enter image description here](https://i.stack.imgur.com/KzhO3.gif)
Вот поведение при нажатии из UIKit:
![enter image description here](https://i.stack.imgur.com/qBfqx.gif)
Это код 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()
}
}
И как я пу sh SwiftUI ребенок от UIKit
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)
}
}