Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI中的VStack内部滚动视图底部对齐_Ios_Swift_Swiftui_Vstack - Fatal编程技术网

Ios SwiftUI中的VStack内部滚动视图底部对齐

Ios SwiftUI中的VStack内部滚动视图底部对齐,ios,swift,swiftui,vstack,Ios,Swift,Swiftui,Vstack,目前正在构建聊天应用程序,我需要在屏幕底部显示新消息。我还需要将消息与底部对齐。但是,默认情况下,在ScrollView中使用VStack具有顶部对齐功能 ScrollView { VStack(alignment: .leading, spacing: 16) { Spacer() .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, maxHeight: .infin

目前正在构建聊天应用程序,我需要在屏幕底部显示新消息。我还需要将消息与底部对齐。但是,默认情况下,在ScrollView中使用VStack具有顶部对齐功能

    ScrollView {
        VStack(alignment: .leading, spacing: 16) {
            Spacer()
            .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, maxHeight: .infinity, alignment: Alignment.topLeading)
            ForEach(notList, id: \.self) { not in
                NotRow(not: not)
                    
            }
            
        }
        .padding()
        .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, alignment: Alignment.topLeading)
        
    }


我该怎么做才能解决这个问题呢?

尝试将所有的
对齐方式更改为
对齐方式。topLeading
改为
对齐方式。bottomLeading
我想你在VStack中缺少了一个maxHeight

VStack(对齐:。前导){
间隔符().帧(最大宽度:无穷大)
//满足于此
}
.frame(maxHeight:.infinity)/如果移除
Spacer()
并将其放在
ForEach
的闭合大括号之后,它将修复它。以下是更新后的代码的外观:

ScrollView {
        VStack(alignment: .leading, spacing: 16) {
            .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, maxHeight: .infinity, alignment: Alignment.topLeading)
            ForEach(notList, id: \.self) { not in
                NotRow(not: not)

            }
            Spacer()
        }
        .padding()
        .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, alignment: Alignment.topLeading)

    }

回答这个问题有点晚,但这可能会帮助其他人。你可以使用一个很好的双旋转技巧来达到你想要的效果。其他解决方案不起作用,因为滚动视图中的最大大小未定义,因为它依赖其子视图来计算自己的内容大小

ScrollView {
  VStack(alignment: .leading, spacing: 16) {
      Spacer()
      .frame(minWidth: 0, maxWidth: .infinity, minHeight:0, maxHeight: .infinity, alignment: Alignment.topLeading)
      ForEach(notList, id: \.self) { not in
          NotRow(not: not)
      }

  }
  .padding()
  .rotationEffect(Angle(degrees: 180))
}
.rotationEffect(Angle(degrees: 180))

ScrollView
没有向其子对象建议与向其建议相同的高度(
VStack
)。它只要求最小尺寸。解决方案是让它的直接子对象以建议的
ScrollView
本身的最小高度进行响应。我们可以通过
GeometryReader
读取建议的高度,并将其设置为孩子的最小高度来实现这一点

GeometryReader{reader in
滚动视图{
VStack{
///间隔符()或Color.red现在将按预期运行
}
.框架(最小高度:读卡器.尺寸.高度)
}
}

你想让空白空间可以滚动吗?我想让它像聊天应用程序一样:你可以滚动一点,但信息会回到底部。哇,这样做似乎有点不雅观。但它对我有用!