Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将GeometryReader安装到抽屉内容物上_Swift_Swiftui - Fatal编程技术网

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
        }
    )
}