【发布时间】:2020-04-17 07:06:33
【问题描述】:
我有一个父视图,我希望导航标题变大。然后我推送一个带有分组表视图的子视图,我希望导航标题为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)
}
}
【问题讨论】:
标签: swiftui-list swiftui