ScrollView 不可见 swiftui
ScrollView Not Visible swiftui
项目githubhttps://github.com/m3rtkoksal/Erupt
在我的滚动视图中,只有第一项是可见的。当我滚动时,我看不到页面上的其他项目。我怎样才能看到其他滚动项目?我在服务结构上有三个元素,但我只能看到其中一个。即使我滚动,其他元素也不可见。我应该在应用程序中看到树滚动元素,但我只看到一个。
struct ScrollViewTwo: View {
var body: some View {
ScrollView(.horizontal) {
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
.frame(height: 150)
}
}
}
struct ScrollViewSecondElement: Identifiable {
var id = UUID()
var price: String
var image: String
var title: String
var explanation: String
}
struct Service {
static let listDataSecond: [ScrollViewSecondElement] = [
ScrollViewSecondElement(price: "0", image: "iphone", title: "Iphone X", explanation: "64GB"),
ScrollViewSecondElement(price: "0", image: "xbox", title: "X Box", explanation: "500GB"),
ScrollViewSecondElement(price: "00", image: "macmini", title: "Mac Mini", explanation: "512GB SSD")
]
}
struct CardViewTwo: View {
var item: ScrollViewSecondElement
var width = UIScreen.main.bounds.width
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 15)
.frame(width: width - 100 , height: 120, alignment: .center)
.foregroundColor(.black)
HStack {
Image(item.image)
.resizable()
.frame(width: 100, height: 100, alignment: .leading)
VStack(alignment: .leading) {
Text(item.title)
.foregroundColor(.white)
.font(.body)
.fontWeight(.bold)
Spacer()
Text(item.explanation)
.foregroundColor(.white)
.font(.caption2)
.fontWeight(.light)
Spacer()
Text(item.price)
.foregroundColor(.white)
.font(.largeTitle)
.fontWeight(.bold)
}
.frame( height: 110, alignment: .leading)
.padding()
VStack(alignment: .trailing) {
HStack {
Image(systemName: "star.fill")
.foregroundColor(.yellow)
Image(systemName: "star.fill")
.foregroundColor(.yellow)
Image(systemName: "star.fill")
.foregroundColor(.yellow)
}
.frame(width: 5, height: 10)
.padding()
Spacer()
Button(action: {
print("Delete button tapped!")
}) {
ZStack {
RoundedRectangle(cornerRadius: 10)
.frame(width: 30, height: 30, alignment: .center)
.foregroundColor(.red)
Image(systemName: "arrow.right")
.foregroundColor(.white)
}
}
}
.frame(height: 110, alignment: .trailing)
.padding()
.offset(y: -10)
}
}
}
}
您必须在 scrollView
:
中使用 Stack
ScrollView(.horizontal) {
HStack {
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
}
.frame(height: 150)
}
此外,如果您的目标是 iOS 14 或更高版本,请考虑使用 Lazy(H\V)Stack
。
代码问题
虽然上面描述了原因,但您的具体代码还有另一个问题,即 contentView
中的第 71
行,您将内容剪裁为 .clipShape(Corners())
。这将在滚动视图中隐藏额外的 space 堆栈。摆脱它,看看会发生什么。
ForEach
默认组成一个组,所以横向滚动需要把所有的动态内容都包裹在HStack
里,如下
使用 Xcode 12 / iOS 14 测试(提供的布局没有变化)
var body: some View {
ScrollView(.horizontal) {
HStack { // << here !!
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
.frame(height: 150)
}
}
}
项目githubhttps://github.com/m3rtkoksal/Erupt
在我的滚动视图中,只有第一项是可见的。当我滚动时,我看不到页面上的其他项目。我怎样才能看到其他滚动项目?我在服务结构上有三个元素,但我只能看到其中一个。即使我滚动,其他元素也不可见。我应该在应用程序中看到树滚动元素,但我只看到一个。
struct ScrollViewTwo: View {
var body: some View {
ScrollView(.horizontal) {
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
.frame(height: 150)
}
}
}
struct ScrollViewSecondElement: Identifiable {
var id = UUID()
var price: String
var image: String
var title: String
var explanation: String
}
struct Service {
static let listDataSecond: [ScrollViewSecondElement] = [
ScrollViewSecondElement(price: "0", image: "iphone", title: "Iphone X", explanation: "64GB"),
ScrollViewSecondElement(price: "0", image: "xbox", title: "X Box", explanation: "500GB"),
ScrollViewSecondElement(price: "00", image: "macmini", title: "Mac Mini", explanation: "512GB SSD")
]
}
struct CardViewTwo: View {
var item: ScrollViewSecondElement
var width = UIScreen.main.bounds.width
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 15)
.frame(width: width - 100 , height: 120, alignment: .center)
.foregroundColor(.black)
HStack {
Image(item.image)
.resizable()
.frame(width: 100, height: 100, alignment: .leading)
VStack(alignment: .leading) {
Text(item.title)
.foregroundColor(.white)
.font(.body)
.fontWeight(.bold)
Spacer()
Text(item.explanation)
.foregroundColor(.white)
.font(.caption2)
.fontWeight(.light)
Spacer()
Text(item.price)
.foregroundColor(.white)
.font(.largeTitle)
.fontWeight(.bold)
}
.frame( height: 110, alignment: .leading)
.padding()
VStack(alignment: .trailing) {
HStack {
Image(systemName: "star.fill")
.foregroundColor(.yellow)
Image(systemName: "star.fill")
.foregroundColor(.yellow)
Image(systemName: "star.fill")
.foregroundColor(.yellow)
}
.frame(width: 5, height: 10)
.padding()
Spacer()
Button(action: {
print("Delete button tapped!")
}) {
ZStack {
RoundedRectangle(cornerRadius: 10)
.frame(width: 30, height: 30, alignment: .center)
.foregroundColor(.red)
Image(systemName: "arrow.right")
.foregroundColor(.white)
}
}
}
.frame(height: 110, alignment: .trailing)
.padding()
.offset(y: -10)
}
}
}
}
您必须在 scrollView
:
Stack
ScrollView(.horizontal) {
HStack {
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
}
.frame(height: 150)
}
此外,如果您的目标是 iOS 14 或更高版本,请考虑使用 Lazy(H\V)Stack
。
代码问题
虽然上面描述了原因,但您的具体代码还有另一个问题,即 contentView
中的第 71
行,您将内容剪裁为 .clipShape(Corners())
。这将在滚动视图中隐藏额外的 space 堆栈。摆脱它,看看会发生什么。
ForEach
默认组成一个组,所以横向滚动需要把所有的动态内容都包裹在HStack
里,如下
使用 Xcode 12 / iOS 14 测试(提供的布局没有变化)
var body: some View {
ScrollView(.horizontal) {
HStack { // << here !!
ForEach(Service.listDataSecond) { item in
CardViewTwo(item: item)
}
.frame(height: 150)
}
}
}