如何设置 UIViewRepresentable 的大小?

Kri*_*oot 5 ios swift swiftui

我想,这个想法是这样的:无论 SwiftUI 中尚未提供什么,都可以使用 UIViewRepresentable 来解决。所以我开始为 TTTAttributedLabel 制作一个 UIViewRepresentable。

但是 API 中缺少一些基本的东西,或者我缺少一些基本的东西:如何设置 UIViewRepresentable 的“内在内容大小”?

就像 SwiftUI 一样Text,我希望我的组件能够根据其容器的大小将自身设置为特定大小。

我的第一个想法是使用内在内容大小,所以我创建了这个:


class SizeRepresentableView: UILabel {
    override init(frame: CGRect) {
        super.init(frame: CGRect.zero)
        text="hello"
        backgroundColor = UIColor.systemYellow
    }

    override var intrinsicContentSize: CGSize {
        return CGSize(width: 100, height: 100)
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

struct SizeRepresentable: UIViewRepresentable {
    func updateUIView(_ uiView: SizeRepresentableView, context: Context) {
    }

    typealias UIViewType = SizeRepresentableView

    func makeUIView(context: UIViewRepresentableContext<SizeRepresentable>) -> SizeRepresentableView {
        let v = SizeRepresentableView(frame: CGRect.zero)
        return v
    }
}

struct SizeRepresentableTest: View {
    var body: some View {
        VStack {
            SizeRepresentable()
            Spacer()
        }
    }
}

struct SizeRepresentable_Previews: PreviewProvider {
    static var previews: some View {
        SizeRepresentableTest()
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。标签占据了所有空间,而间隔物则没有。使用 SwiftUIText而不是我的,SizeRepresentable标签整齐地排列在顶部,并且间隔符占据了所有空间,正如它应该的那样。

我似乎找不到任何有关如何布局 UIViewRepresentable 的文档。

有什么方法可以解决这个问题呢?

Obl*_*ely 3

请参阅:UIViewRepresentable 本身的大小如何与其内部的 UIKit 控件相关?

struct SizeRepresentableTest: View {
    var body: some View {
        VStack {
            SizeRepresentable().fixedSize()
            Spacer()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)