Как мне настроить размер UIView для его содержимого в SwiftUI? - PullRequest
1 голос
/ 16 апреля 2020

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

https://github.com/yonat/MultiSelectSegmentedControl

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

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

Демонстрационный код не дает глубокого понимания проблемы, это просто вызов представления 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"]
            )
        }
    }
}

enter image description here

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

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

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

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

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

Как сделать так, чтобы SwiftUI UIViewRepresentable представление обнимало его содержимое?

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

1 Ответ

1 голос
/ 16 апреля 2020

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

MultiSegmentPicker(
    selectedSegmentIndexes: $selectedSegmentIndexes,
    items: ["First", "Second", "Third", "Done"]
).fixedSize()       // << here !!
...