Navigation SwiftUI Scrollview中断导航链接行为
我在细节视图中切换设置时遇到问题,切换设置后,导航会立即弹出到主屏幕。这仅在使用滚动视图而不是主屏幕上的列表时发生。是否有人有解决方案或知道这是否是将被修复的bug?今天我等待了Xcode 11 Beta 7,但这并没有解决这个问题 滚动视图的当前行为:Navigation SwiftUI Scrollview中断导航链接行为,navigation,scrollview,swiftui,navigationlink,Navigation,Scrollview,Swiftui,Navigationlink,我在细节视图中切换设置时遇到问题,切换设置后,导航会立即弹出到主屏幕。这仅在使用滚动视图而不是主屏幕上的列表时发生。是否有人有解决方案或知道这是否是将被修复的bug?今天我等待了Xcode 11 Beta 7,但这并没有解决这个问题 滚动视图的当前行为: 单击要转到详细信息屏幕的行 单击“开始”以切换收藏夹设置 立即跳回主屏幕 ScrollView的预期行为(列表的当前行为): 单击要转到详细信息屏幕的行 单击“开始”以切换收藏夹设置 停留在详细信息屏幕上,可以反复切换最喜爱的设置 单击后退按钮
import SwiftUI
import Combine
struct Sport: Identifiable{
var id = UUID()
var name : String
var isFavorite = false
var school : String
}
final class UserData: ObservableObject {
@Published var sportsData =
[
Sport(name: "soccer", isFavorite: false, school: "WPI"),
Sport(name: "tennis", isFavorite: true, school: "WPI"),
Sport(name: "swimming", isFavorite: true, school: "WPI"),
Sport(name: "running", isFavorite: true, school: "RIT"),
]
}
struct ContentView: View {
@EnvironmentObject var userData: UserData
var body: some View {
NavigationView{
List{
ForEach(userData.sportsData){ sport in
if sport.isFavorite{
NavigationLink(destination:
DetailsView(sport: sport)
){
HStack {
Text(sport.name)
Spacer()
Image(systemName: "star.fill")
.foregroundColor(sport.isFavorite ? .yellow : .gray)
}
}
}
}
}
}.navigationBarTitle("Settings")
}
}
struct DetailsView: View {
@EnvironmentObject var userData: UserData
var sport: Sport
var sportIndex: Int {
userData.sportsData.firstIndex(where: { $0.id == sport.id })!
}
var body: some View {
ZStack {
Text(sport.name).offset(x: 0, y: 100)
Button(action: {
self.userData.sportsData[self.sportIndex].isFavorite.toggle()
print(self.sport.isFavorite)
}) {
Image(systemName: "star.fill")
.foregroundColor(self.userData.sportsData[self.sportIndex].isFavorite ? .yellow : .gray)
}
}.padding(.horizontal)
}
}
#if DEBUG
struct Testing_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(UserData())
}
}
#endif
这是一个奇怪的错误,我还不能想出一个解决办法。完全无关:似乎您在错误的视图上使用了
.navigationBarTitle()
。它应该修改导航视图
的内容视图,而不是导航视图
本身。在您的情况下(列表
或滚动视图
)。这样,您可以分别为每个推送视图指定不同的名称。您好,我在项目中遇到了完全相同的问题。你能找到解决办法吗?不幸的是没有。目前看来,这似乎是SwiftUI的一个限制。希望它能在今年夏天WWDC之后被修复。我也有这个问题…真的很烦人。在XCode 12中,我似乎仍然有这个问题,或者一个非常类似的问题。你还在经历这个吗?