Как установить размер UIViewRepresentable? - PullRequest
0 голосов
/ 26 марта 2020

Идея, как я думал, заключалась в следующем: все, что еще не предоставлено в 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.

Как решить эту проблему?

1 Ответ

0 голосов
/ 26 марта 2020

См .: Как сам размер UIViewRepresentable по отношению к элементу управления UIKit внутри него?

struct SizeRepresentableTest: View {
    var body: some View {
        VStack {
            SizeRepresentable().fixedSize()
            Spacer()
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...