DynamicSheet
— это SwiftUI-компонент для отображения модальных окон (sheet) с авто-подсчетом высты. Компонент автоматически адаптируется под содержимое
Подробно про реализацию и её особенности можно прочить в этой статье
- iOS 15+
Для интеграции DynamicSheet
в ваш Xcode проект, сдедуйте шагам:
- In Xcode, navigate to File -> Swift Packages -> Add Package Dependency.
- Paste the repository's URL.
- Высота sheet автоматически подстраивается под содержимое.
- При использовании ScrollView в sheet, он будет растягиваться на весь экран
- Нужно использовать
@Environment(\.dismissDynamicSheet)
для закрытия sheet
import SwiftUI
struct ContentView: View {
@State private var showSheet = false
var body: some View {
Button("Show Sheet") {
showSheet.toggle()
}
.dynamicSheet(showSheet: $showSheet) {
Text("Hello, Sheet!")
}
}
}
Особенностью является то, что вместо, dismiss
, нужно использовать dismissDynamicSheet
.dynamicSheet(showSheet: $showSheet) {
SheetWithDismissButton()
}
struct SheetWithDismissButton: View {
@Environment(\.dismissDynamicSheet) private var dismiss
var body: some View {
VStack {
Text("This is a sheet with a dismiss button")
.font(.title)
.padding()
Button("Dismiss") {
dismiss?() // Закрывает sheet
}
}
}
}