框架和固定大小修饰符

Pyr*_*ttt 2 layout swiftui

有什么fixedSize作用?

它只是将所有布局行为修复为等于idealWidth/吗idealHeight

如果是这样,我们可以这样说吗

frame(width: w, height:h)
Run Code Online (Sandbox Code Playgroud)

相当于

frame(minWidth: w, idealWidth:w, maxWidth: w, minWidth: h, idealWidth:h, maxWidth: h)
Run Code Online (Sandbox Code Playgroud)

或不?

Adr*_*ien 5

通常 aView受到其父级提议的空间的约束,该空间称为proposedSize

有些视图使用整个建议空间 ( Color, Rectangle)。其他人会接受他们的idealSize,受此限制proposedSize(类似min(idealWidth, proposedWidth))。

最好的例子就是视图Text。让我们看一个Text97 点宽的视图:当父视图为其提供 150 点宽时,它仅使用 97 点。

第一个例子

当父视图仅提供 50 点宽时,它仅使用 50 点宽(并跨越几行)。

第二个例子

如果我们使用修饰符fixedSize,我们会像苹果公司所说的那样提出反建议。也就是说我们建议视图使用itidealWidth而不是the proposedWidth

应用于文本视图,这意味着它将不受父视图提供的宽度的限制,因此不会跨越多行。

第三个例子

应用于 a Rectangle,它变得更令人惊讶:它idealWidth似乎是 10 点......

在此输入图像描述

应用于视图UIKit(用 包裹UIViewRepresentable)时,idealWidth 将等于intrinsincContentSize.width

struct MyViewRepresentable: UIViewRepresentable {

    func makeUIView(context: Context) -> MyUIView {
        let view = MyUIView()
        view.backgroundColor = .orange
        return view
    }
    
    func updateUIView(_ uiView: MyUIView, context: Context) { }
    
    class MyUIView: UIView {
        override var intrinsicContentSize: CGSize {
            CGSize(width: 70, height: 70)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后一个例子