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趋势
Вам нужно краткое изложение на английском?