获取父大小 SwiftUI
Get Parent Size SwiftUI
有没有什么方法可以使用 SwiftUI 找到父视图的大小,我查看了文档和示例,似乎大多数(如果不是全部)都是硬编码大小,理想情况下我想找到的大小父级,然后根据父级大小的百分比设置子视图大小(可能在某些 swift 助手 class 或其他东西中)例如
func getSizeFromParent(fractionHeight: Int, fractionWidth: Int) -> Size
{
var parentSize = // is there a way to get parent size somehow
var newHeight = parentSize.height * fractionHeight
var newWidth = parentSize.width * fractionWidth
return Size(newHeight, newWidth)
}
注意上面的代码并不是一个工作示例,只是伪代码
在 SwiftUI 中 parents 为他们的 children 建议大小,但 children 决定如何处理它。他们可以忽略它,部分使用它,或者完全听话。
正如 Radagast 在您的问题中评论的那样,GeometryReader 是 SwiftUI 用于在视图树层次结构中传达大小的方式。
我写了一篇关于如何使用 GeometryReader 和 GeometryProxy 的详细文章,并且包含了一些用例示例。 GeometryReader 与 .background() 和 .overlay() 修饰符结合使用也非常有用,因为它可以让您 "steal" 另一个视图的几何形状。
有关更多信息,请查看:https://swiftui-lab.com/geometryreader-to-the-rescue/
有没有什么方法可以使用 SwiftUI 找到父视图的大小,我查看了文档和示例,似乎大多数(如果不是全部)都是硬编码大小,理想情况下我想找到的大小父级,然后根据父级大小的百分比设置子视图大小(可能在某些 swift 助手 class 或其他东西中)例如
func getSizeFromParent(fractionHeight: Int, fractionWidth: Int) -> Size
{
var parentSize = // is there a way to get parent size somehow
var newHeight = parentSize.height * fractionHeight
var newWidth = parentSize.width * fractionWidth
return Size(newHeight, newWidth)
}
注意上面的代码并不是一个工作示例,只是伪代码
在 SwiftUI 中 parents 为他们的 children 建议大小,但 children 决定如何处理它。他们可以忽略它,部分使用它,或者完全听话。
正如 Radagast 在您的问题中评论的那样,GeometryReader 是 SwiftUI 用于在视图树层次结构中传达大小的方式。
我写了一篇关于如何使用 GeometryReader 和 GeometryProxy 的详细文章,并且包含了一些用例示例。 GeometryReader 与 .background() 和 .overlay() 修饰符结合使用也非常有用,因为它可以让您 "steal" 另一个视图的几何形状。
有关更多信息,请查看:https://swiftui-lab.com/geometryreader-to-the-rescue/