Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Ios 如何在SwiftUI中设置与superview成比例的高度和宽度?_Ios_Swift_Xcode_Swiftui_Xcode11 - Fatal编程技术网

Ios 如何在SwiftUI中设置与superview成比例的高度和宽度?

Ios 如何在SwiftUI中设置与superview成比例的高度和宽度?,ios,swift,xcode,swiftui,xcode11,Ios,Swift,Xcode,Swiftui,Xcode11,我想知道是否可以根据SwiftUI中的superview将高度和宽度按比例调整到任何UIControl 正如我们所做的那样: let txtFld = UITextField() txtFld.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: self.view.frame.width/2, height: self.view.frame.height*0.1)) 我知道我们可以通过使用Spacer()、paddin

我想知道是否可以根据
SwiftUI
中的superview将
高度和
宽度按比例调整到任何
UIControl

正如我们所做的那样:

let txtFld = UITextField()
txtFld.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: self.view.frame.width/2, height: self.view.frame.height*0.1))
我知道我们可以通过使用
Spacer()
padding
edgeInsets
来调整宽度。但是高度呢?我看过很多关于
SwiftUI
的教程,所有
height
都是静态的。甚至在苹果的网站上


如果有人知道如何设置与视图高度成比例的高度,请在此分享。因为在某个时候我们需要这样。例如,如果需要根据设备高度制作按钮。(假设在iPhone SE=40、iPhone 8P=55、iPhone X=65中)

您可以使用
GeometryReader
从家长处获取该信息:

struct MyView: View {
    var body: some View {
        GeometryReader { geometry in
           /*
             Implement your view content here
             and you can use the geometry variable
             which contains geometry.size of the parent
             You also have function to get the bounds
             of the parent: geometry.frame(in: .global)
           */
        }
    }
}
您可以为
视图
创建一个自定义结构,并将其几何图形绑定到一个变量,使其几何图形可以从
视图
本身访问

-例如: 首先定义一个称为GeometryGetter的视图(归功于@kontiki):

struct GeometryGetter:视图{
@绑定变量rect:CGRect
var body:一些观点{
返回GeometryReader{geometry in
self.makeView(几何体:几何体)
}
}
func makeView(几何体:GeometryProxy)->一些视图{
DispatchQueue.main.async{
self.rect=geometry.frame(in:.全局)
}
返回矩形().fill(Color.clear)
}
}
然后,要获取文本视图(或任何其他视图)的边界,请执行以下操作:

struct MyView:View{
@状态私有变量rect:CGRect=CGRect()
var body:一些观点{
文本(“某些文本”)。背景(GeometryGetter($rect))
//然后,您可以在视图的其他位置使用rect:
矩形().框架(宽度:100,高度:矩形高度)
}
}

@VRAwesome我添加了一个示例。检查一下。这看起来是个很棒的主意,但是对我来说(Xcode 11.2.1),它在
self.rect=geometry.frame(in:.global)
上崩溃,错误为“前提条件失败:无效输入索引:1”我还没有更新我的Xcode,我会在完成后检查这个问题,并让你知道。我希望你能在这个想法的帮助下自己做到这一点,直到那时为止@grimxn可能的副本