获取父视图大小 SwiftUI

6

在SwiftUI中是否有一种找到父视图大小的方法?我已经查看了文档和示例,似乎大多数(如果不是全部)都在硬编码大小。理想情况下,我想找到父视图的大小,然后根据父视图大小的百分比设置子视图大小(可能在某个Swift帮助器类或其他地方)。例如:

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

请注意,上述代码并不意味着是一个可用的示例,只是伪代码。

1
你应该在SwiftUI中使用Geometry Reader,这个链接对你有帮助。 - Radagast
1个回答

9

在SwiftUI中,父视图向其子视图提供大小建议,但子视图可以决定如何使用它。他们可以忽略它,部分使用它,或完全服从。

正如Radagast在你的问题中所评论的那样,GeometryReader是SwiftUI用于在视图树层次结构中向下传递大小的方法。

我撰写了一篇详细的文章,介绍了如何使用GeometryReader和GeometryProxy,并提供了一些使用案例示例。GeometryReader与.background()和.overlay()修饰符相结合非常有用,因为它让你可以“窃取”另一个视图的几何形状。

更多信息请参见:https://swiftui-lab.com/geometryreader-to-the-rescue/


非常好的文章!顺便说一句,既轻巧又包含了我所需的所有信息。 - AngryDuck
谢谢!我在任何地方都找不到那些信息(特别是“视图首选项”),所以在努力理解并最终破解它之后,我决定做出贡献;)干杯。 - kontiki
@kontiki,你能否看一下这个问题:https://dev59.com/3r7pa4cB1Zd3GeqP4LLe? - Pablo Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接