Swiftui Scrollview Viewmodifier 适用于所有 Scrollview

Posted

技术标签:

【中文标题】Swiftui Scrollview Viewmodifier 适用于所有 Scrollview【英文标题】:Swiftui Scrollview Viewmodifier Applies to All Scrollviews 【发布时间】:2020-12-23 22:58:40 【问题描述】:

我已经为 Swiftui 的滚动视图实现了一个视图修改器,以禁用内置滚动,以允许应用自定义拖动手势。修饰符效果很好。

问题是 viewmodifier 被应用于应用程序中的其他滚动视图,而不仅仅是那些以 .modifier 为目标的滚动视图!我尝试了简单的可能解决方案,例如滚动视图的唯一 ID,但无济于事。

有谁知道这种行为是否可以修复?

ScrollViewReader  (proxy: ScrollViewProxy) in
     ScrollView(.horizontal) 
         LazyHGrid(rows: rows, alignment: .center, spacing: cellSpacing) 
              ForEach(Assets, id: \.self)  asset in
                   AssetView(asset)
              
          .transition(.asymmetric(insertion: .identity, removal: .identity))
                    .offset(x: initialOffset.width + x.width)
      
      .id("AssetDetail")
      .modifier(DetailScrollViewModifier())
      .gesture(DragGesture(minimumDistance: 30, coordinateSpace: .local)......


struct DetailScrollViewModifier: ViewModifier 
    init() 
        UIScrollView.appearance().isUserInteractionEnabled = false
        UIScrollView.appearance().isScrollEnabled = false
        
    

    func body(content: Content) -> some View 
        return content
       

非常感谢

【问题讨论】:

正如你所提到的, UIScrollView.appearance() 总是会影响应用中所有滚动视图的外观。如果您使用手势“滚动”网格,那么您不妨完全移除 ScrollView。 developer.apple.com/documentation/uikit/uiappearance 非常感谢您的回复。我正在使用滚动视图,因为在没有滚动视图的情况下通过偏移移动时,lazyhstack 似乎不会延迟加载 - 我正在使用延迟将昂贵的加载推迟到需要时。 【参考方案1】:

试试这个

ScrollView(.vertical, showsIndicators: false) 
   VStack 
      // Your Code
   

.onAppear 
    // set
    UIScrollView.appearance().isUserInteractionEnabled = false
    UIScrollView.appearance().isScrollEnabled = false

.onDisappear 
    // reset
    UIScrollView.appearance().isUserInteractionEnabled = true
    UIScrollView.appearance().isScrollEnabled = true   

【讨论】:

不工作...回到上一个视图 ScrollView 保持禁用状态 :(

以上是关于Swiftui Scrollview Viewmodifier 适用于所有 Scrollview的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 淡出 ScrollView

SwiftUI:调整 ScrollView 的边界

SwiftUI:为啥这个 ScrollView 的内容错位了?

SwiftUI:在 ScrollView 中居中内容

SwiftUI - 如何获取 ScrollView 内容的大小(高度)

SwiftUI:奇怪的行为 ScrollView