SwiftUI button 与sheet的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SwiftUI button 与sheet的使用相关的知识,希望对你有一定的参考价值。

参考技术A SwiftUI 中想要不跳转从主View弹出一个View,以前在swift中,可以直接选择一按钮拖线到新的View

在你想弹出的View下方.sheet()后选择isPresented,然后绑定一个@state变量,当这个变量值变化时,刷新View,所以在button中点击后触发方法,改变了值,所以刷新视图弹出。你可以选择下拉关闭这个View,但是有时需要用户点击一个按钮后,自动关闭,就需要实现下面方法

ios13中弹出的View无法全屏。

SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同

【中文标题】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 button 与sheet的使用的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 多张纸:关闭动画损坏

SwiftUI 表格加粗

SwiftUI List 在 Sheet 中的外观和行为与在 NavigationLink 中不同

SwiftUI Button 与 Map 交互

在 SwiftUI 中重置绑定变量

SwiftUI:.sheet() 在关闭当前工作表时不会使用预期数据转到上一个视图