Ios SwiftUI中的VStack内部滚动视图底部对齐
目前正在构建聊天应用程序,我需要在屏幕底部显示新消息。我还需要将消息与底部对齐。但是,默认情况下,在ScrollView中使用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(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现在将按预期运行
}
.框架(最小高度:读卡器.尺寸.高度)
}
}
你想让空白空间可以滚动吗?我想让它像聊天应用程序一样:你可以滚动一点,但信息会回到底部。哇,这样做似乎有点不雅观。但它对我有用!