VStack没有在ScrollView中填充屏幕宽度,但确实填充了列表

时间:2019-06-09 13:54:57

标签: swift swiftui

我创建了图像的可滚动列表,如下所示:

 CREATE TRIGGER REQUESTOR_TRG
    BEFORE INSERT ON REQUESTOR 
    FOR EACH ROW 
    BEGIN
      <<COLUMN_SEQUENCES>>
      BEGIN
        IF INSERTING AND :NEW.ID IS NULL THEN
          SELECT REQUESTOR_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
        END IF;
      END COLUMN_SEQUENCES;
    END; 

这是此代码生成的UI:

现在,我想摆脱NavigationView { List { ForEach(landmarks) { landmark in landmark.image(forSize: 200) // some modifiers... } .navigationBarTitle(Text(category.rawValue)) } 创建的行分隔符。因此,我将List替换为List。这就是预览显示的内容:

我该如何解决?

我见过this other similar question,但是接受的答案实际上并不能解决问题,而是引入了固定宽度。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,显然滚动视图使用了最小尺寸。

您可以将.frame修饰符添加到堆栈内的内容中,并按如下所示将其宽度声明为屏幕的宽度:

ContentInsideScrollView { ... }.frame(width: UIScreen.main.bounds.width)

请注意填充,滚动视图可能会延伸到屏幕的整个宽度。

否则,您可以将行设置为无穷大宽度:

.frame(minWidth: 0, maxWidth: .infinity)

无论哪种方式,您都必须使用 .frame 修饰符

答案 1 :(得分:2)

找到了完整的SwiftUI解决方案。

var body: some View {
    GeometryReader { geometry in
        ScrollView(alwaysBounceVertical: true) {
            VStack {
                // Your code
            }.frame(width: geometry.size.width)
        }
    }.edgesIgnoringSafeArea(.all)
}