SwiftUI主体中的UIViewRepresentable自动调整大小

时间:2020-05-18 12:18:52

标签: ios swift xcode swiftui tvos

我有一个需要在SwiftUI中使用的自定义UIKit类,并将其包装在UIViewRepresentable中。

final class TagsView: UIStackView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        axis = .vertical

        let firstTag = UILabel()
        firstTag.textColor = .black
        firstTag.font = .systemFont(ofSize: 40, weight: .bold)
        firstTag.text = "123"
        addArrangedSubview(firstTag)

        let secondTag = UILabel()
        secondTag.textColor = .black
        secondTag.font = .systemFont(ofSize: 40, weight: .bold)
        secondTag.text = "ABC"
        addArrangedSubview(secondTag)

        NSLayoutConstraint.activate([
            firstTag.widthAnchor.constraint(equalToConstant: 100),
            firstTag.heightAnchor.constraint(equalToConstant: 50),

            secondTag.widthAnchor.constraint(equalToConstant: 150),
            secondTag.heightAnchor.constraint(equalToConstant: 75)
        ])
    }

    required init(coder: NSCoder) {
        super.init(coder: coder)
    }

}

struct MyCustomView: UIViewRepresentable {

    func makeUIView(context: Context) -> TagsView {
        return TagsView()
    }

    func updateUIView(_ uiView: TagsView, context: Context) { }

}

我的SwiftUI对象全屏显示,我需要将UIViewRepresentable放置在其右下角,以便使用UIKit代码自动确定其大小。

var body: some View {
    HStack {
        VStack {
            Spacer()
            MyCustomView().background(Color.red)
        }

        Spacer()
    }.background(Color.green).edgesIgnoringSafeArea(.all)
}

结果,我得到的输出看起来像这样不正确。我的UIViewRepresentable(红色)被拉长了。 TagsView类中的约束将被忽略。

我需要的结果看起来像这样。

我在做什么错了?

0 个答案:

没有答案