Swift 将GeometryReader安装到抽屉内容物上
如何将Swift 将GeometryReader安装到抽屉内容物上,swift,swiftui,Swift,Swiftui,如何将GeometryReader安装到中间的ExpandingDrawer目录 (可复制和粘贴): 导入快捷界面 结构展开抽屉按钮:视图{ @绑定变量已扩展:Bool var body:一些观点{ 按钮(操作:{withAnimation{isExpanded.toggle()}}){ 文本(扩展?“关闭”:“打开”) } } } 结构ExpandingDrawer:视图{ @绑定变量已扩展:Bool 变量内容:()->内容 var body:一些观点{ 内容() .frame(minWidt
GeometryReader
安装到中间的ExpandingDrawer
目录
(可复制和粘贴):
导入快捷界面
结构展开抽屉按钮:视图{
@绑定变量已扩展:Bool
var body:一些观点{
按钮(操作:{withAnimation{isExpanded.toggle()}}){
文本(扩展?“关闭”:“打开”)
}
}
}
结构ExpandingDrawer:视图{
@绑定变量已扩展:Bool
变量内容:()->内容
var body:一些观点{
内容()
.frame(minWidth:0,maxWidth:.无穷大,minHeight:nil,maxHeight:contentHeight)
.allowsHitTesting(isExpanded)
.clipped()
.transition(.slide)
}
私有变量contentHeight:CGFloat{
iExpanded?零:CGFloat(0)
}
}
结构DroperTestView\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
}
结构ContentView:View{
@状态变量isExpanded=false
var body:一些观点{
GeometryReader{geo-in
VStack(间距:0){
顶部
.框架(高度:geo.size.height*1/4)
中间的
底部
.框架(高度:地理位置、尺寸、宽度)
}
}
}
var top:一些视图{
ZStack(对齐:对齐(水平:中心,垂直:底部)){
矩形()
.foregroundColor(.blue.opacity(0.2))
展开抽屉按钮(isExpanded:$isExpanded)
.padding()
}
}
var middle:一些观点{
展开抽屉(isExpanded:$isExpanded){
中间内容
}
}
内容:一些观点{
GeometryReader{geo-in
VStack{
ForEach(0..为了避免GeometryReader
更改我们的视图,我们可以将其放置在.overlay()
中
例如:
struct ContentView: View {
class Storage {
var geo: GeometryProxy! {
didSet {
print(geo.size)
}
}
}
let storage = Storage()
/* ... */
}
var middleContent:一些视图{
VStack{
ForEach(0..在本例中,删除middleContent中的GeometryReader实际上可以使它完美地工作…但在我的实际观点中,我有很多事情依赖于它…因此删除它是不可能的。
var middleContent: some View {
VStack {
ForEach(0..<10) { _ in
Button(action: {}) { Text("Random stuff") }
}
Text("Don't know how tall...")
Text("Height can change...")
Text("But does need to fit snug (no extra space)")
}
.overlay(
GeometryReader { geo in
Rectangle()
.fill(Color.clear)
let _ = storage.geo = geo
}
)
}