如何在 SwiftUI 中禁用 ScrollView Bounce

Roh*_*ana 15 scrollview bounce swiftui

任何Modifier可供停止跳动ScrollViewswiftUI

struct RoomDetailsView: View {

    var body: some View {
        ScrollView(showsIndicators: false) {
            Image("test")
            Text("Hello Text")
            ...
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过下面的代码,但它对我不起作用。看起来它已被弃用

ScrollView(alwaysBounceVertical: true) {
       Image("test")
       Text("Hello Text")
       ...
       ...
}
Run Code Online (Sandbox Code Playgroud)

Ans*_*ngh 14

尝试使用这行代码:

UIScrollView.appearance().bounces = false
Run Code Online (Sandbox Code Playgroud)

你可以这样使用它:-

struct RoomDetailsView: View {
   init() {
      UIScrollView.appearance().bounces = false
   }

   var body: some View {
      ScrollView(showsIndicators: false) {
         Image("test")
         Text("Hello Text")
         ...
         ...
          }
      }
  }
Run Code Online (Sandbox Code Playgroud)

或者,您可以在 AppDelegate 中编写这一行,以将此行为贯穿到您的应用程序中。

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    UIScrollView.appearance().bounces = false
 }
Run Code Online (Sandbox Code Playgroud)

  • 第一个是否也改变了我的应用程序中的所有滚动视图? (3认同)
  • 如果您只想在内容小于滚动视图大小时禁用弹跳,请执行以下操作:`UIScrollView.appearance().alwaysBounceVertical = false` (3认同)

Gol*_*ber 14

  1. 将 ScrollView 的 showIndicators 参数设置为 false,以便与视图交互的用户不会激活滚动指示器(即使没有启用滚动,也可能会发生这种情况)。
ScrollView(showsIndicators: false)
Run Code Online (Sandbox Code Playgroud)
  1. 在 ScrollView 的 onAppear 修饰符中,添加此行。
UIScrollView.appearance().bounces = false
Run Code Online (Sandbox Code Playgroud)
  1. 在 ScrollView 的 onDisappear 修饰符中,添加此行。
UIScrollView.appearance().bounces = true
Run Code Online (Sandbox Code Playgroud)

如果您在 init 中将 UIScrollView.appearance().bounces 设置为 false,它将阻止应用程序的所有 ScrollView 弹跳。通过在 onAppear 修饰符中将其设置为 true,在 onDisappear 修饰符中将其设置为 false,可以确保它仅影响一个 ScrollView。

你的 ScrollView 应该看起来像这样。

ScrollView(showsIndicators: false) {
    ...
    ...
    ...
}
.onAppear {
    UIScrollView.appearance().bounces = false
}
.onDisappear {
    UIScrollView.appearance().bounces = true
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*tar 11

苹果在 iOS 16.4 中引入了一个名为的新修饰符scrollBounceBehavior,可用于防止 ScrollView 在内容小于屏幕时弹起。

https://developer.apple.com/documentation/swiftui/view/scrollbouncebehavior(_:axes:)

struct RoomDetailsView: View {

    var body: some View {
        ScrollView(showsIndicators: false) {
            Image("test")
            Text("Hello Text")
            ...
            ...
        }
        .scrollBounceBehavior(.basedOnSize)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 快到了...现在我们只需要一种方法来无条件禁用它。 (11认同)
  • 老实说,有时不理解 SwiftUI 团队.. (3认同)

Gen*_*ure 6

您可以使用SwiftUI-Introspect库:

ScrollView {
    // some content
}
.introspectScrollView { scrollView in
    scrollView.alwaysBounceVertical = false
}
Run Code Online (Sandbox Code Playgroud)