从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)
}
}
}
}
}
我以为是读卷器的问题,但我不这么认为,也有可能是框架的问题,但我也不确定。
1条答案
按热度按时间rks48beu1#
我在VStack上添加了.id()调用,而不是文本元素,不知何故,现在一切似乎都正常了。