How to create resizable sheets in SwiftUI | Bootcamp #64

Swiftful Thinking
8 Jun 202315:13

Summary

TLDR在这段视频脚本中,Nick 介绍了 iOS 16 中新增的一个功能——可调节大小的弹出层(sheet)。在 iOS 16 之前,弹出层的大小是固定的,只能覆盖屏幕的一部分。但 iOS 16 引入了新的 API,允许开发者创建可调节大小的弹出层,这意味着弹出层可以是半屏、四分之一屏或任何自定义大小。Nick 展示了如何通过简单地添加一行代码,使用现有的弹出层 API 来实现这一功能。他创建了一个名为 'resizableSheetBootCamp' 的 SwiftUI 视图,并演示了如何通过设置不同的 'presentation detents' 来控制弹出层的大小。此外,还介绍了如何通过编程方式在不同的弹出层大小之间切换,以及如何禁用交互式解散,以创建一个用户无法通过下拉关闭的弹出层。这个新功能为 Swift UI 开发者提供了更多自定义界面的可能性,使得 UI 设计更加灵活和丰富。

Takeaways

  • 📱 iOS 16 新增了可调整大小的sheet功能,允许开发者创建不同尺寸的sheet。
  • 🔄 与iOS 16之前的sheet相比,新功能不会全屏覆盖,而是可以根据需要调整大小。
  • 💡 API与现有的sheet API完全兼容,开发者只需添加一行代码即可实现自定义尺寸的sheet。
  • 📈 通过`presentation: detents`,开发者可以指定sheet的大小,如中等(medium)或大(large)。
  • 🔗 可以使用`@State`变量来绑定和控制sheet的尺寸,实现程序化地在不同尺寸间切换。
  • 🚫 新增的`interactiveDismissDisabled`修饰符可以禁用sheet的滑动关闭功能,适用于需要强制用户完成某些操作的场景。
  • 🔽 用户仍然可以通过向下滑动来关闭sheet,这是Swift UI中sheet的一个通用特性。
  • 🎨 可以使用分数(fraction)和高度(height)来创建自定义尺寸的sheet,以适应不同的设计需求。
  • 📐 推荐使用分数而非固定高度,因为分数可以更好地适应不同尺寸的屏幕。
  • 🧩 可以在同一个`presentation: detents`中组合多种尺寸,提供更丰富的交互体验。
  • ⚙️ 需要注意的是,只能设置在`presentation: detents`修饰符中定义的尺寸,否则会导致错误。

Q & A

  • iOS 16 中新增的可调整大小的sheet功能是什么?

    -iOS 16 新增的可调整大小的sheet功能允许开发者创建可以调整大小的界面元素,这些元素可以是半屏、四分之一屏或者任何自定义大小。这个功能与现有的sheet API完全兼容,开发者只需在现有代码中添加一个新的modifier即可实现。

  • 如何使用Swift UI在iOS 16中创建一个可调整大小的sheet?

    -在Swift UI中,你可以通过给`sheet`添加一个`presentation: detents` modifier来创建一个可调整大小的sheet。这个modifier接受一个包含不同大小的集合,例如`.medium`和`.large`,或者自定义的尺寸如分数或固定高度。

  • 在iOS 16之前,sheet的界面元素是如何的?

    -在iOS 16之前,sheet的界面元素通常是全屏的,它覆盖了整个屏幕,没有提供半屏或四分之一屏等中间尺寸的选择。

  • 如何使用Swift UI实现一个始终显示在屏幕上的sheet?

    -通过给sheet添加`interactive dismissal disabled` modifier,可以创建一个始终显示在屏幕上的sheet,用户无法通过拖动来关闭它。这适用于需要用户完成某些操作(如支付)才能继续使用应用的场景。

  • 如何自定义sheet的大小?

    -可以通过设置`presentation: detents` modifier中的不同detents来自定义sheet的大小。可以使用预设的如`.medium`和`.large`,或者使用自定义的分数(如`0.5`代表屏幕的一半)和固定像素高度(如`200`像素)。

  • 如何通过编程方式在不同的sheet大小之间切换?

    -可以通过创建一个绑定到`presentation detents`的变量,并在需要的时候更新这个变量的值来在不同的sheet大小之间切换。例如,可以创建两个按钮,一个设置为`.medium`,另一个设置为`.large`,通过点击这些按钮来改变sheet的大小。

  • 为什么在尝试添加一个不在`presentation detents` modifier中定义的detent时会出错?

    -如果尝试添加一个不在`presentation detents` modifier中定义的detent,程序会报错,因为Swift UI只允许设置在modifier中已经定义的detents。因此,如果计划在代码中动态设置detents,需要确保这些detents已经在modifier中声明。

  • 如何隐藏sheet的拖动指示器?

    -可以通过设置`presentation drag indicator`为`hidden`来隐藏sheet的拖动指示器。这在自定义拖动指示器或者不希望显示拖动指示器的情况下很有用。

  • 用户如何与可调整大小的sheet进行交互?

    -用户可以通过拖动来调整sheet的大小,或者通过swipe down来关闭sheet。此外,开发者可以提供按钮或其他UI元素,允许用户通过点击来改变sheet的大小。

  • 为什么说iOS 16中的这个新API对Swift UI开发者来说是一个巨大的胜利?

    -这个新API允许开发者以极少的代码更改实现复杂的、可自定义的界面元素,如可调整大小的sheet,而无需从头开始构建自定义的拖动手势,这大大简化了开发工作并提高了开发效率。

  • 在iOS 16中,如何实现一个初始状态为特定大小的sheet,并允许用户进一步调整其大小?

    -可以在创建sheet时设置一个初始的`presentation detent`,然后通过`presentation: detents` modifier提供一系列用户可以拖动到的大小。用户可以通过拖动来调整sheet的大小,或者使用提供的UI元素来切换到预设的大小。

Outlines

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Mindmap

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Keywords

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Highlights

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード

Transcripts

plate

このセクションは有料ユーザー限定です。 アクセスするには、アップグレードをお願いします。

今すぐアップグレード
Rate This

5.0 / 5 (0 votes)

関連タグ
iOS 16Swift UISheet自定义界面设计API交互编程用户体验开发者UI趋势
英語で要約が必要ですか?