Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/SignalUI/SwiftUIExtensions/ScrollBounceBehaviorIfAvailable.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

public import SwiftUI

public struct ScrollBounceBehaviorIfAvailableModifier: ViewModifier {
    public enum Behavior {
        case automatic
        case always
        case basedOnSize

        @available(iOS 16.4, *)
        var asScrollBounceBehavior: ScrollBounceBehavior {
            switch self {
            case .automatic: .automatic
            case .always: .always
            case .basedOnSize: .basedOnSize
            }
        }
    }

    var behavior: Behavior

    public func body(content: Content) -> some View {
        if #available(iOS 16.4, *) {
            content.scrollBounceBehavior(behavior.asScrollBounceBehavior)
        } else {
            content
        }
    }
}

extension View {
    public func scrollBounceBehaviorIfAvailable(_ behavior: ScrollBounceBehaviorIfAvailableModifier.Behavior) -> some View {
        modifier(ScrollBounceBehaviorIfAvailableModifier(behavior: behavior))
    }
}