如何解决SwiftUI - 带有嵌入式导航视图的页面
我正在尝试构建一个分页应用程序,其中每个页面都有自己的 NavigationView。它有点工作,但我在导航栏中得到了一个完全多余的“返回”按钮。到目前为止,我的代码是 -
struct AllListsView: View {
@Observedobject var viewmodel: AllListsviewmodel
@State private var pageName: String = ""
init(viewmodel: AllListsviewmodel) {
self.viewmodel = viewmodel
}
var body: some View {
IfLet($viewmodel.listViews) { listViews in
TabView {
ForEach(listViews) { $0 }
}
.tabViewStyle(PageTabViewStyle(indexdisplayMode: .automatic))
} else: {
Text("No lists")
}
}
}
struct ListView: View,Identifiable,Hashable {
let id: String
private var viewmodel: Listviewmodel
init(viewmodel: Listviewmodel) {
self.id = String(viewmodel.list.index)
self.viewmodel = viewmodel
}
var body: some View {
NavigationView {
Text("Any Text") // if I don't have this,nothing is displayed
List(viewmodel.listItems) {
Text("\($0.quantity) \($0.name)")
}
.navigationBarTitle(viewmodel.list.name)
}
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: ListView,rhs: ListView) -> Bool {
lhs.id == rhs.id
}
}
但是,如果我将 NavigationView 放在 TabView 之外,它会正确显示,但是滚动列表不会缩小大标题文本,我必须在页面更改时更新导航栏标题 -
// AllListsView -
var body: some View {
IfLet($viewmodel.listViews) { listViews in
NavigationView {
TabView {
ForEach(listViews,id: \.self) { listView in
listView
.onAppear {
pageName = listView.name
}
}
}
.tabViewStyle(PageTabViewStyle(indexdisplayMode: .automatic))
.navigationBarTitle(pageName)
}
} else: {
Text("No lists")
}
}
// ListView -
var body: some View {
List(viewmodel.listItems) {
Text("\($0.quantity) \($0.name)")
}
}
我希望能够在 SwiftUI 中做到这一点,因为它看起来像是未来的道路。但我知道对我来说使用 UIKit 来做这件事是相当微不足道的,所以很令人沮丧。
非常感谢任何帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。