Как мне заставить мой UIView иметь правильный размер для его содержимого в SwiftUI?

Я хочу использовать потрясающий MultiSegmentPicker, написанный Yonat Sharon в моем представлении SwiftUI.

https://github.com/yonat/MultiSelectSegmentedControl

Однако я не совсем понимаю взаимодействие между представлением UIViewRepresentable View и моим представлением SwiftUI. Как заставить контроллер представления хоста уменьшить свою высоту до размера сегментированного элемента управления?

Вот вид отладчика демонстрационной страницы - обратите внимание на синюю область вокруг верхней панели:

Демонстрационный код не дает подробного понимания проблемы, это просто вызов представления UIViewRepresentable. Я упростил его до одного примера:

   struct MultiSegmentPickerX: View {

    @State private var selectedSegmentIndexes: IndexSet = []

    var body: some View {
        VStack(alignment: .center) {
            Spacer()
            MultiSegmentPicker(
                selectedSegmentIndexes: $selectedSegmentIndexes,
                items: ["First", "Second", "Third", "Done"]
            )
        }
    }
}

Обратите внимание, что у меня есть VStack с Spacer() перед элементом управления.

Желательным поведением для этого примера было бы, чтобы полоса с "первым", "вторым" и т. Д. Плотно прилегала к нижней части экрана. Вместо этого хост-контроллер удерживает все это пространство...

Нужно ли мне использовать программу чтения геометрии, чтобы решить эту проблему и уменьшить высоту. Или мне нужно что-то настроить в представлении UIViewRepresentable?

Любые идеи по объединению UIKit и SwiftUI всегда приветствуются... Это простое решение для кого-нибудь?

Это не решило мою проблему: содержимое UIViewRepresentable не обновляется

Как заставить представление SwiftUI UIViewRepresentable охватить его содержимое?

Как мне изменить размер UITextView на его содержимое?

1 ответ

Решение

Не могу проверить это сейчас, просто мысленно, попробуйте с фиксированным размером, как показано ниже

MultiSegmentPicker(
    selectedSegmentIndexes: $selectedSegmentIndexes,
    items: ["First", "Second", "Third", "Done"]
).fixedSize()       // << here !!
Другие вопросы по тегам