如何阻止SwiftUI视图变得比超级视图更宽

时间:2019-10-06 11:36:06

标签: layout swiftui

我创建了一个UIHostingController来在我的应用程序中放置一个SwiftUI视图。根视图包含一个VStack,并在其中包含一些HStackPicker。选择器将视图推到比屏幕宽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)

2 个答案:

答案 0 :(得分:1)

我看不到提供的代码有任何明显的错误。您可以尝试使用const precedingThreeChars = getCharsPrecedingFocus(contentState, selectionState, 3);来强制GeometryReader为可用空间的宽度。另外还要添加一些VStack),否则您的padding(将从边缘开始

Text

在调试视图层次结构时,为什么视图扩展到边缘之外是否有任何线索?

答案 1 :(得分:0)

这有点晚了,但是我遇到了同样的问题,并通过确保外部VStack的对齐方式设置为.lead来解决。内部Vstack也具有对齐方式:引导,然后向内部VStack添加.padding()