gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 11:25:37 33 4
gpt4 key购买 nike

我想知道是否可以根据SwiftUI中的 super View 对任何UIControl按比例调整heightwidth

正如我们正在做的那样:

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 来实现调整宽度。但是高度呢?我看过很多 SwiftUI 教程,其中 height 都是静态的。即使在苹果网站上也是如此。 SwiftUI Tutorials

如果有人知道如何设置与 View 高度成比例的高度,请在这里分享。因为在某些时候我们需要这样。对于前。如果需要根据设备高度制作按钮。 (假设 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)
*/
}
}
}

您可以为您的View创建一个自定义结构,并将其几何图形绑定(bind)到一个变量,以使其可以从View本身访问它的几何图形。

-示例:

首先定义一个名为 GeometryGetter 的 View (归功于@kontiki):

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

然后,获取 TextView (或任何其他 View )的边界:

struct MyView: View {
@State private var rect: CGRect = CGRect()

var body: some View {
Text("some text").background(GeometryGetter($rect))

// You can then use rect in other places of your view:
Rectangle().frame(width: 100, height: rect.height)
}
}

关于ios - 如何在 SwiftUI 中设置与 superview 成比例的高度和宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58281687/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com