swiftUI中框架中的idealwidth和width参数有什么区别

Kun*_*wal 5 swift swiftui

Idealwidth 与 swiftUI 框架中的正常宽度有何不同?

小智 12

宽度和高度是定义框架尺寸的固定值。如果你写了这样的东西......

    Rectangle()
        .foregroundColor(.blue)
        .frame(width: 200, height: 200)
Run Code Online (Sandbox Code Playgroud)

...您将得到一个 200x200 的蓝色正方形,无论它是否适合父视图。

然而,理想的尺寸并不固定。写这样的东西...

    Rectangle()
        .foregroundColor(.blue)
        .frame(idealWidth: 200, idealHeight: 200)
Run Code Online (Sandbox Code Playgroud)

...将完全填满一个空白的视图。这是因为理想的尺寸更多的是一个温和的建议,而不是父母提出的尺寸。对于许多预定义的视图,理想的尺寸定义了视图需要被理解的空间大小。理想Text()的宽度是字符串的长度,理想的高度是线条的高度。

回顾一下我们理想大小的矩形,.fixedSize()像这样应用......

Rectangle()
    .foregroundColor(.blue)
    .frame(idealWidth: 200, idealHeight: 200)
    .fixedSize()
Run Code Online (Sandbox Code Playgroud)

...将强制理想尺寸并创建 200x200 蓝色正方形。如果您添加该修饰符,Text()您会看到它也呈现出理想的大小,在许多情况下,它会是一个如此宽的字符串,以至于超出了其父框架。

.fixedSize()您可以通过定义在哪些轴上定义视图来进一步使用修改器。

Rectangle()
    .foregroundColor(.blue)
    .frame(idealWidth: 200, idealHeight: 200)
    .fixedSize(horizontal: true, vertical: false)
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我们的矩形固定为其理想宽度,但可以垂直增长以填充其父级。这对于自定义按钮之类的东西很有用,您有时可能希望限制其高度但允许其拉伸以填充其父视图。

您可以从这篇文章以及这篇文章中学到更多信息。苹果公司还在此处.fixedSize()对修饰符的讨论中对理想尺寸进行了一些探索。