如何在SwiftUI中按比例设置高度和宽度?

时间:2019-10-08 07:12:30

标签: swift height swiftui ios13 xcode11

我想知道是否可以根据height中的超级视图将widthSwiftUI的比例调整为任何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().paddingedgeInsets来调整宽度。但是height呢?我见过很多SwiftUI的教程,height都是静态的。即使在Apple网站上。 solaris_x86_slice

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

1 个答案:

答案 0 :(得分:4)

您可以使用class Parent { method() { console.log('parent method'); } } class Child extends Parent { method() { console.log('child method'); } invokeParentMethod() { super.method(); } } const c = new Child(); c.method(); c.invokeParentMethod();从父级那里获取该信息:

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) */ } } } 创建一个自定义结构,并将其几何形状绑定到变量,以使其可以从View本身中访问。

-示例:

首先定义一个名为GeometryGetter的视图(感谢@kontiki):

View

然后,获取Text视图(或任何其他视图)的边界:

struct GeometryGetter: View {
    @Binding var rect: CGRect

    var body: some View {
        return GeometryReader { geometry in
            self.makeView(geometry: geometry)
        }
    }

    func makeView(geometry: GeometryProxy) -> some View {
        DispatchQueue.main.async {
            self.rect = geometry.frame(in: .global)
        }

        return Rectangle().fill(Color.clear)
    }
}