UIViewControllerRepresentable:NavigationView中的导航标题和条形按钮项目被忽略

问题描述 投票:1回答:1
  • 我有一个包裹在UITableViewController中的UIViewControllerRepresentable子类。
  • 我在视图控制器中设置了navigationItem.titlenavigationItem.leftBarButtonItems
  • 我将我的UIViewControllerRepresentable实例作为SwiftUI NavigationLink中SwiftUI NavigationView的目的地。
  • 当视图被推到导航堆栈上时,将出现表格视图,但标题和条形按钮项不会出现。

这里发生了什么?

uiviewcontroller uikit swiftui uinavigationitem navigationview
1个回答
1
投票

已解决!

问题与期望SwiftUI在后台使用UINavigationController。因此,如果我使用UIViewControllerRepresentable将UIViewController推送到SwiftUI NavigationView上,那么我希望该导航控制器将使用该视图控制器的导航项和工具栏项。正如我上面提到的,它们被忽略。

根本原因事实证明,标题和项目被忽略了,因为我的视图控制器的父级不是UINavigationController所期望的。相反,它的父级是SwiftUI在后台使用的中间包装视图控制器,该控制器又被推到导航控制器上。它会忽略标题和项目,因为导航控制器正在向包装器询问其项目(没有包装),而不是我的视图控制器。

UIKit解决方案因此,如果您想通过UIKit视图控制器设置标题或工具栏按钮项或工具栏项,则需要在其父项上进行设置,例如:

self.parent?.navigationItem.title = “My Title”

此外,您不能通过viewDidLoad进行此操作,因为到那时,SwiftUI父级似乎还没有包装视图控制器。您必须在viewWillAppear中执行此操作。

SwiftUI解决方案您还可以通过SwiftUI设置标题和栏按钮。在您的UIViewControllerRepresentable实例上,只需像往常一样添加.navigationBarTitle和开头/结尾项。然后,您可以让按钮从UIViewControllerRepresentable实现中与视图控制器对话。

© www.soinside.com 2019 - 2024. All rights reserved.