SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同
Posted
技术标签:
【中文标题】SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同【英文标题】:SwiftUI List looks and behaves differently in Sheet than in NavigationLink 【发布时间】:2021-05-02 13:40:35 【问题描述】:我创建了一个列表视图,其中包含供用户选择的部分(请参阅 LocationPickerModalView.swift),此列表可通过 NavigationLink 获得并按预期工作。然而,我决定将这个确切的视图移动到工作表(参见 ThrillEditView.swift),但这极大地改变了视图的外观和工作方式。 (参见下面的 Gif) 有没有办法使用工作表获得相同的行为?
// ThrillEditView.swift
public struct ThrillEditView: View
@State private var isLocationPickerSheetPresented: Bool = false
public var body: some View
form
// ...
NavigationLink("NavigationLink", destination: LocationPickerModalView())
Button("Sheet (Via Button)")
self.isLocationPickerSheetPresented = true
// ...
.sheet(isPresented: self.$isLocationPickerSheetPresented, content:
LocationPickerModalView()
)
// LocationPickerModalView.swift
public struct LocationPickerModalView: View
public var body: some View
List
Button("1")
Button("2")
Section(header: Text("one"))
Button("3")
Button("4")
Section(header: Text("two"))
Button("5")
Button("6")
【问题讨论】:
它们对我来说看起来一样(Xcode 版本 12.5 (12E262)) 【参考方案1】:.sheet
会创建新的视图层次结构,因此您需要在其中显式地添加 NavigationView
,例如
.sheet(isPresented: self.$isLocationPickerSheetPresented, content:
NavigationView
LocationPickerModalView()
)
【讨论】:
这给出了相同的结果,除了将其包装在 NavigationView 中会在顶部添加 NavigationBar。以上是关于SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI中sheet弹出嵌在NavigationView中的子视图无法用presentationMode关闭(dismiss)弹出视图的解决
如何在 SwiftUI 中更改 modal 或 sheet 的大小?
iOS14中点击SwiftUI列表项导航跳转返回后外观呈灰色的解决