如何延长UIScrollView可滚动长度?设置contentSize不生效是什么原因?
UIScrollView设置contentSize不生效的常见原因
你使用的赋值代码:
scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height+300)
- 赋值时机错误
如果在viewDidLoad方法中执行这段代码,此时self.view还未完成最终布局渲染,拿到的frame是xib/故事板中的初始值,不是实际显示在屏幕上的正确尺寸,计算出的contentSize自然不符合预期。可以把赋值逻辑移到viewDidLayoutSubviews方法中执行,如果需要避免重复赋值可以自行加判断标记。 - 启用了Auto Layout约束布局UIScrollView
如果UIScrollView是通过Auto Layout约束来控制位置大小的,手动设置contentSize默认不生效。这种场景下UIScrollView的滚动范围由内部子控件的约束自动计算,你需要给scrollView内部最底部的子控件添加相对于scrollView内容布局向导(Content Layout Guide)的底部约束,约束值大于0即可自动撑开滚动范围。 - 滚动开关未开启
检查UIScrollView的isScrollEnabled属性是否被设置为false,该属性为false时即使contentSize大于scrollView本身的可视区域,也不会触发滚动效果。 - 计算逻辑未适配视图变化
如果你的页面支持横竖屏切换,或者scrollView的父视图大小会动态变化,self.view.frame.height会跟随变动,你只赋值一次contentSize无法适配后续的尺寸变化,需要在视图大小变化的回调中重新计算赋值。
你可以先通过写死固定值的方式快速定位问题:scrollView.contentSize = CGSize(width: 375, height: 1500),如果写死高度后可以正常滚动,说明问题出在高度取值或赋值时机上;如果写死也无法滚动,优先排查约束配置和isScrollEnabled属性。
内容的提问来源于stack exchange,提问作者bigdogg99juherd
相关产品推荐
相关产品推荐

