【发布时间】:2022-08-06 05:02:15
【问题描述】:
从 iOS 16 开始,您可以使用 presentationDetents(_:) 修饰符来实现这些。
【讨论】:
-
嘿。感谢您的回答。不幸的是,我不得不意识到带有演示卡槽的纸张与我正在寻找的纸张之间存在重要差异。也就是说,如果我一直保持工作表可见(这是我想要的),我将无法再与主屏幕交互。在“查找我的”应用程序和“地图”应用程序中,您可以不断地与主屏幕交互,尽管工作表会不断显示。有任何想法吗?
是的,展示工作表并不完全相同,并且没有内置的 SwiftUI 视图可以做到这一点。
以下是正确方向的一些指示:
1
尝试使用 ZStack 作为基本结构:
ZStack(alignment: .bottom) {
mapView
sheetView
}
工作表漂浮在地图上并与底部对齐(您可以根据需要使用.frame(height:) 设置其高度)。 mapView 应该是全高,因为工作表背景是半透明的
2
工作表背景可能如下所示:
// Sheet background:
RoundedRectangle(cornerRadius: 18, style: .continuous)
.fill(.regularMaterial)
.edgesIgnoringSafeArea(.bottom)
.overlay {
// Handle
Capsule()
.fill(.ultraThinMaterial)
.colorScheme(.dark)
.frame(width: 60, height: 8)
.padding()
}
3
您可以使用拖动手势开始处理实施制动器:
@State var sheetHeight = 300.0
// in body:
sheetView
.frame(height: sheetHeight)
.gesture(DragGesture(minimumDistance: 1)
.onChanged{ v in
sheetHeight = 300 - v.translation.height
}
.onEnded{ _ in
sheetHeight = 300
}
)
从那里开始,地图有大量的行为:自定义定位、内容在顶部定位转换为可滚动、图标显示和隐藏、地图平移时切换定位等。
做这些事情并没有内置的魔法——它只是自定义 UI 工作。没有理由你不能在 SwiftUI 中实现它(或者如果你愿意,也可以在 UIKit 中)。玩得开心!
【讨论】: