有没有办法在 SwiftUI 列表中隐藏滚动指示器?
Is there a way to hide scroll indicators in a SwiftUI List?
我想创建一个 SwiftUI 列表,但不显示滚动指示器。 ScrollView 提供了 showIndicators 来做到这一点。怎么做到的?
List 基本上在幕后创建一个表视图 (UpdateCoalescingTableView),并且表视图是可滚动的。然而不幸的是,您无法在 SwiftUI 中访问滚动视图属性。
您 "might" 能够创建一个 UIViewRepresentable,它可以在视图层次结构中向上移动,直到找到滚动视图,但我不推荐它。
您也可以创建自己的滚动视图,在其中放置一个 vstack,然后 "fake" 一个列表视图,这可能是更安全的方法。
任何指标(列表、滚动视图等)
您可以取消显示所有 List
的指示器,但使用 UITableView
的 API。因为 SwiftUI List
在幕后将 UITableView
用于 iOS:
struct ContentView: View {
init() {
UITableView.appearance().showsVerticalScrollIndicator = false
}
var body: some View {
List(0...100, id: \.self) { item in
Text("hey")
}
}
}
请注意,这将消除所有 TableView
和 List
指标。如果需要,您应该使其再次可见。
⚠️还没有重要提示
Apple 似乎正在移除 appearance
黑客攻击(但 目前还没有)。因此,您可以在内部使用 LazyVStack
和 ScrollView
而不是 List
并使用可用参数隐藏指标。
struct ContentView: View {
var body: some View {
ScrollView(.vertical, showsIndicators: false) { // <- This argument
LazyVStack {
ForEach(1...100, id: \.self) {
Text("\([=11=])").frame(height: 40)
}
}
}
}
}
在接受的答案中没有任何外观上的变通方法,实际上很容易做到这一点。您只需使用 ScrollView 初始值设定项并将参数 showsIndicators
设置为 false。
ScrollView(.vertical, showsIndicators: false) {
// ... your content for scrollView
}
在您的 ScrollView 中,您可以使用 LazyVStack
,如果您有很多子视图需要滚动浏览。 SwiftUI 然后将非常有效地呈现您的子视图:"lazy" -> 仅在需要时)。
在有原生 SwiftUI 方法实现此功能之前,Introspect 库提供了一个不错的解决方案。
将所有修饰符应用到您的列表后,只需将以下内容添加为最后一个修饰符:
List {
...
}
.introspectTableView { tableView in
tableView.showsVerticalScrollIndicator = false // here you can access any other UITableView property
}
我希望在某个时候有一种本机方法可以做到这一点。
swift scrollview 隐藏滚动条
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
隐藏滚动视图指示器栏swiftui
ScrollView(.vertical, showsIndicators: false) {
// ... your content for scrollView
}
我想创建一个 SwiftUI 列表,但不显示滚动指示器。 ScrollView 提供了 showIndicators 来做到这一点。怎么做到的?
List 基本上在幕后创建一个表视图 (UpdateCoalescingTableView),并且表视图是可滚动的。然而不幸的是,您无法在 SwiftUI 中访问滚动视图属性。
您 "might" 能够创建一个 UIViewRepresentable,它可以在视图层次结构中向上移动,直到找到滚动视图,但我不推荐它。
您也可以创建自己的滚动视图,在其中放置一个 vstack,然后 "fake" 一个列表视图,这可能是更安全的方法。
任何指标(列表、滚动视图等)
您可以取消显示所有 List
的指示器,但使用 UITableView
的 API。因为 SwiftUI List
在幕后将 UITableView
用于 iOS:
struct ContentView: View {
init() {
UITableView.appearance().showsVerticalScrollIndicator = false
}
var body: some View {
List(0...100, id: \.self) { item in
Text("hey")
}
}
}
请注意,这将消除所有 TableView
和 List
指标。如果需要,您应该使其再次可见。
⚠️还没有重要提示
Apple 似乎正在移除 appearance
黑客攻击(但 目前还没有)。因此,您可以在内部使用 LazyVStack
和 ScrollView
而不是 List
并使用可用参数隐藏指标。
struct ContentView: View {
var body: some View {
ScrollView(.vertical, showsIndicators: false) { // <- This argument
LazyVStack {
ForEach(1...100, id: \.self) {
Text("\([=11=])").frame(height: 40)
}
}
}
}
}
在接受的答案中没有任何外观上的变通方法,实际上很容易做到这一点。您只需使用 ScrollView 初始值设定项并将参数 showsIndicators
设置为 false。
ScrollView(.vertical, showsIndicators: false) {
// ... your content for scrollView
}
在您的 ScrollView 中,您可以使用 LazyVStack
,如果您有很多子视图需要滚动浏览。 SwiftUI 然后将非常有效地呈现您的子视图:"lazy" -> 仅在需要时)。
在有原生 SwiftUI 方法实现此功能之前,Introspect 库提供了一个不错的解决方案。
将所有修饰符应用到您的列表后,只需将以下内容添加为最后一个修饰符:
List {
...
}
.introspectTableView { tableView in
tableView.showsVerticalScrollIndicator = false // here you can access any other UITableView property
}
我希望在某个时候有一种本机方法可以做到这一点。
swift scrollview 隐藏滚动条
scrollView.showsHorizontalScrollIndicator = false
scrollView.showsVerticalScrollIndicator = false
隐藏滚动视图指示器栏swiftui
ScrollView(.vertical, showsIndicators: false) {
// ... your content for scrollView
}