【问题标题】:Disable vertical scroll in UIScrollView Swift在 UIScrollView Swift 中禁用垂直滚动
【发布时间】:2017-10-04 11:09:37
【问题描述】:

(不要将此问题标记为重复。我阅读了很多问题,但找不到问题的答案。)

我的问题如下:我有一个UIScrollView,它应该只能水平滚动。在这里它垂直滚动 20 像素(奇怪的事实:它似乎与状态栏的高度相同)。

我尝试像这样打印UIScrollView 的内容大小、y 偏移量和高度:

print(horizontalScrollView.contentSize)
print(horizontalScrollView.bounds.size.height)
print(horizontalScrollView.contentOffset.y)

我明白了:

(1125.0, 667.0). // scrollview content size
667.0.           // scrollview height
-20.0            // content offset (y)

我知道scrollView 内容大小高度必须是 scrollView 高度。正如你所看到的那样。

我使用约束将 3 个UIViewController 水平堆叠。除了这个问题,它运行良好。

另一个事实:它在 Swift 4 和 Xcode 9 之前就有效...我不知道这是否是原因。

你有什么想法吗?在此先感谢您的帮助。

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案1】:

    您可以简单地执行此操作。 斯威夫特 4

    self.scrollView.contentSize.height = 1.0 // disable vertical scroll
    

    【讨论】:

    • 欢迎来到 Stack Overflow。感谢您尝试回答问题,请查看:stackoverflow.com/help/how-to-answer
    • 如果要禁用滚动但保留实际内容偏移量:scrollView.isScrollEnabled = false。将其设置为 TRUE 以再次启用滚动。
    • @Fox5150 是的,但这也会禁用水平滚动
    【解决方案2】:

    由于 iOS 11 内容插图可以自动调整。尝试将滚动视图的行为设置为不对其进行调整。

    if #available(iOS 11, *) {
        scrollview.contentInsetAdjustmentBehavior = .never
    }
    

    【讨论】:

      【解决方案3】:

      非常有魅力的解决方案是:

           // also don't forget
           // YourViewController: UIViewController, UIScrollViewDelegate {
      
        @IBOutlet weak var scrollView: UIScrollView!
      
        override func viewDidLoad() {
          super.viewDidLoad()
      
          self.scrollView.delegate = self
        }
      
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
           if scrollView.contentOffset.y > 0 || scrollView.contentOffset.y < 0 {
              scrollView.contentOffset.y = 0
           }
        }
      

      【讨论】:

      • 完美答案。
      【解决方案4】:

      只需在scrollViewDidScroll中设置contentOffset

      if scrollView.contentOffset.y > 0 {
          scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 0)
      }
      

      【讨论】:

      • 我知道这种方法,但它不干净。还是谢谢。
      【解决方案5】:

      Swift 5

      scrollView.isScrollEnabled = false
      

      【讨论】:

        【解决方案6】:

        使用下一个类,根据需要设置canScroll:

        class BlockScrollView: UIScrollView {
            var canScroll = true
        
            override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
                if canScroll {
                    super.setContentOffset(contentOffset, animated: animated)
                }
            }
        }
        

        【讨论】:

          【解决方案7】:

          迅速

          self.scrollView.contentSize.width = 1.0 // 禁用垂直滚动

          【讨论】:

            【解决方案8】:

            只添加一行

            yourScrollView.bounces = false
            

            并确保您的滚动视图子视图(内容)高度等于您的滚动视图高度 你就完成了

            【讨论】:

              猜你喜欢
              • 2011-07-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多