Идея, как я думал, заключалась в следующем: все, что еще не предоставлено в SwiftUI, можно обойти с помощью UIViewRepresentable. Поэтому я решил сделать UIViewRepresentable для TTTAttributedLabel.
Но в API чего-то не хватает basi c, или я чего-то не хватает basi c: как можно установить «intrinsi c» размер содержимого "UIViewRepresentable?
Так же, как SwiftUI Text
, я бы хотел, чтобы мой компонент мог установить себе определенный размер с учетом размера его контейнера.
My Первой идеей было использование содержимого типа intrinsi c, поэтому я создал это:
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()
}
}
, но это не работает. Метка занимает все пространство, проставка - нет. С SwiftUI Text
вместо моего SizeRepresentable
ярлык аккуратно расположен сверху, а распорка занимает все пространство, как и должно быть.
Кажется, я не могу найти никакой документации о том, как макет UIViewRepresentable.
Как решить эту проблему?