Как сделать так, чтобы представление SwiftUI не стало шире, чем superview - PullRequest
1 голос
/ 06 октября 2019

Я создал UIHostingController для размещения представления SwiftUI в моем приложении. Корневое представление содержит VStack, а внутри него - некоторые HStack s и Picker s. Средство выбора толкает экран шире экрана на 8 пунктов. Это выглядит плохо - текст немного за кадром. Обычно я исправляю это с помощью ограничений автоматического размещения, которые прикрепляют левый и правый края представления к суперпредставлению с приоритетом 1000 (обязательно). Что такое эквивалент в SwiftUI?

Какой-то выкинутый код, который вызывает проблему

struct EditSegmentView: View {

    @State var seconds: Int = 10

    var body: some View {
        VStack {
            HStack {
                Text("Pause after intro")
                Spacer()
                Text("10 seconds")
            }
            Picker(selection: $seconds, label: Text("Seconds")) {
                ForEach(0..<60) { n in
                    Text("\(n) sec").tag(n)
                }
            }
        }
    }
}

Это отображается из UIViewController, например:

let editView = EditSegmentView()
let vc = UIHostingController(rootView: editView)
vc.modalPresentationStyle = .fullScreen
present(vc, animated: true)

1 Ответ

1 голос
/ 06 октября 2019

Я не вижу ничего явно неправильного с предоставленным кодом. Вы можете попробовать использовать GeometryReader, чтобы заставить VStack быть шириной доступного пространства. Также добавьте немного padding(), потому что в противном случае ваш Text начнется прямо с края

var body: some View {
    GeometryReader { proxy in
        VStack {
            //...
        }   .padding()
            .frame(width: proxy.size.width)
    }
}

Есть ли какие-либо подсказки относительно того, почему представление расширяется за границы, когда вы отлаживаете его иерархию представления?

...