我有一个需要在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类中的约束将被忽略。
我需要的结果看起来像这样。
我在做什么错了?