UITableViewController
中的UIViewControllerRepresentable
子类。navigationItem.title
和navigationItem.leftBarButtonItems
。UIViewControllerRepresentable
实例作为SwiftUI NavigationLink
中SwiftUI NavigationView
的目的地。这里发生了什么?
已解决!
问题与期望SwiftUI在后台使用UINavigationController。因此,如果我使用UIViewControllerRepresentable将UIViewController推送到SwiftUI NavigationView上,那么我希望该导航控制器将使用该视图控制器的导航项和工具栏项。正如我上面提到的,它们被忽略。
根本原因事实证明,标题和项目被忽略了,因为我的视图控制器的父级不是UINavigationController所期望的。相反,它的父级是SwiftUI在后台使用的中间包装视图控制器,该控制器又被推到导航控制器上。它会忽略标题和项目,因为导航控制器正在向包装器询问其项目(没有包装),而不是我的视图控制器。
UIKit解决方案因此,如果您想通过UIKit视图控制器设置标题或工具栏按钮项或工具栏项,则需要在其父项上进行设置,例如:
self.parent?.navigationItem.title = “My Title”
此外,您不能通过viewDidLoad进行此操作,因为到那时,SwiftUI父级似乎还没有包装视图控制器。您必须在viewWillAppear中执行此操作。
SwiftUI解决方案您还可以通过SwiftUI设置标题和栏按钮。在您的UIViewControllerRepresentable实例上,只需像往常一样添加.navigationBarTitle和开头/结尾项。然后,您可以让按钮从UIViewControllerRepresentable实现中与视图控制器对话。