在 UIScrollView Swift 中禁用垂直滚动
Posted
技术标签:
【中文标题】在 UIScrollView Swift 中禁用垂直滚动【英文标题】:Disable vertical scroll in 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 之前就有效...我不知道这是否是原因。
你有什么想法吗?在此先感谢您的帮助。
【问题讨论】:
【参考方案1】:您可以简单地执行此操作。 斯威夫特 4
self.scrollView.contentSize.height = 1.0 // disable vertical scroll
【讨论】:
欢迎来到 Stack Overflow。感谢您尝试回答问题,请查看:***.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
并确保您的滚动视图子视图(内容)高度等于您的滚动视图高度 你就完成了
【讨论】:
以上是关于在 UIScrollView Swift 中禁用垂直滚动的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 - UITableView 在 UIScrollView 中被切断
Objective-C:如何在 UIScrollView 中禁用垂直滚动