作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以根据SwiftUI
中的 super View 对任何UIControl按比例调整
?height
和width
正如我们正在做的那样:
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
都是静态的。即使在苹果网站上也是如此。 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/
我是一名优秀的程序员,十分优秀!