水平滚动视图滚动到可见区域之外- SwiftUI

flseospp  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(265)

从gif循环中可以看到,滚动条有时会随机滚动到视图之外,必须首先将滚动条拖动到右侧,项目才会出现。
这只是偶尔发生的,完全是随机的。我不认为这是由于代理(scrollTo:),因为即使没有滚动到选定的元素,滚动条中的元素有时是不可见的。

下面是它背后的代码:

@ViewBuilder func buildScrollView() -> some View {
        ScrollViewReader { proxy in
            ScrollView(.horizontal, showsIndicators: false) {
                HStack {
                    ForEach(scaleEntries, id: \.self.title) { entry in
                        VStack {
                            Button(action: {
                                self.selectedScaleEntry = entry
                                saveRating()
                                // this looks absolutly stupid but it needs to be done to update the state of the parent views
                                self.viewModel.selectedComparisonElement = self.viewModel.selectedComparisonElement
                            }) {
                                Text(entry.scaleValueIdentifier ?? "")
                                    .font(.custom("MB Corpo S Text WEB", size: 24).weight(.bold))
                                    .frame(width: 40, height: 40)
                                    .padding()
                                    .foregroundColor(.black)
                                    .background(Color(UIColor(hex: entry.color!)))
                                    .border(selectedScaleEntry?.title != entry.title ? .clear : .gray, width: 4)
                                    .id(entry.color)
                            }
                            Text(entry.scaleValueTitle ?? " ")
                                .font(.custom("Helvetica", size: 12).weight(.light))
                                .fixedSize(horizontal: false, vertical: true)
                        }
                    }
                }
                .frame(maxWidth: .infinity, maxHeight: 110)
            }
            .padding()
            .onChange(of: self.selectedScaleEntry) { _ in
                if selectedScaleEntry != nil {
                        withAnimation {
                            proxy.scrollTo(selectedScaleEntry?.color, anchor: .trailing)
                        }
                }
            }
        }
    }

我以为是读卷器的问题,但我不这么认为,也有可能是框架的问题,但我也不确定。

rks48beu

rks48beu1#

我在VStack上添加了.id()调用,而不是文本元素,不知何故,现在一切似乎都正常了。

相关问题