问题描述
我正在尝试构建一个分页应用程序,其中每个页面都有自己的 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 (将#修改为@)