SwiftUIScrollView仅向一个方向滚动
尝试使用视图作为列表行样式来创建自定义列表(默认情况下,要摆脱列表中的丑陋行)。
但是,一旦我将ZStack行放入滚动视图中,滚动视图就会在两个方向上滚动,而不仅仅是垂直滚动。
这是contentView:
NavigationView {
ScrollView{
VStack(alignment: .leading){
ForEach(friends) { friends in
NavigationButton(destination: MessageDetailView(friend: friends)) {
CustomListItem(friend: friends)
}
}
Spacer()
}
}
.foregroundColor(.black)
.navigationBarTitle(Text("Messages"))
}
这是customListItem:
Group{
ZStack {
RoundedRectangle(cornerRadius: 10)
.shadow(radius: 1, y:1)
.frame(width: UIScreen.main.bounds.width - 32, height: 75)
.foregroundColor(.gray)
HStack {
Image(systemName: "person.crop.circle")
.resizable()
.frame(width: 50, height: 50)
VStack(alignment: .leading) {
HStack {
Text(friend.name)
.font(.headline)
Text("\(friend.date, formatter: dateFormatter)")
}
Text(friend.messagesReceived[0])
.font(.subheadline)
} .lineLimit(nil)
Spacer()
Image(systemName: "chevron.right.circle")
.foregroundColor(.black)
}.padding(10)
}.padding([.leading, .trailing])
}
有什么方法可以限制滚动到垂直方向或在此方向上强制画格吗?
尝试使用.frame(...)修饰符不起作用,因为我尝试过。这导致视图根本无法加载。
图片示例:
1> piebie..:
这可以通过来实现GeometryReader
。将您的包裹ScrollView
成一个,然后设置宽度VStack
。
对于SwiftUI,GeometryReader是一个非常简单且非常有用的技巧:)
这是我如何与您的代码一起使用的:
NavigationView {
GeometryReader { geometry in
ScrollView {
VStack(alignment: .leading){
ForEach(self.friends) { friend in
NavigationButton(destination: MessageDetailView(friend: friend)) {
CustomListItem(friend: friend)
}
}
Spacer()
}.frame(width: geometry.size.width)
}
.foregroundColor(.black)
.navigationBarTitle(Text("Messages"))
}
}
2> Liam..:
从Xcode 11 beta 3(11M362v)开始axes
,构造a时有一个参数ScrollView
可以设置为.horizontal
或.vertical
ScrollView(.vertical, showsIndicators: true) { ... }