美文网首页
关于ScrollView不滚动的原因深层分析

关于ScrollView不滚动的原因深层分析

作者: 流年划过颜夕 | 来源:发表于2018-10-24 13:42 被阅读1次

最近做项目遇见个问题,聊天结束后评价页面,展示内容过长在小屏4s上需要滚动,但是ScrollView不能滚动。
按照一般的解决思路去寻找原因:
检测ScrollView的scrollenabled是否为YES
检测ScrollView的userInteractionEnabled是否为YES
检测代码中有没有设置ScrollView的ContentSize,并且比ScrollView的frame要大等等

做完一系列的检测发现ScrollView仍然不能滚动。最后断点调试发现ScrollView的ContentSize赋值并不成功,所以导致了ScrollView无法滚动,但是代码中明明写了的,为什么还是赋值不成功呀?

在进一步观察中发现赋值不成功的原因是因为自动布局中约束的影响,

主要原因是UIScrollView是个非常特殊的view, UIScrollView与其subview之间相对位置的约束 并不会直接用于frame的计算,而是会转化为对ContentSize的计算

也就是说当UIScrollView固定了上下左右的约束分别指向subview的位置,只要subview的位置固定下来了,ContentSize的大小就确定下来了。换句话说当设置约束的时候就会默认设置contentSize,并且在后面不管怎么重新设置contentSize的大小,因为是同时进行的,后面系统在运行的时候都会按照之前设置约束时产生的contentSize运行。

怎么解决这个问题呢?
其实理解了问题产生的原因就好解决问题了,稍微设置下延迟操作就可以重新设置刷新UIScrollView的contentSize的大小

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.scrollView setContentSize:CGSizeMake(self.scrollView.KSWidth, pointY)];
});

相关文章

网友评论

      本文标题:关于ScrollView不滚动的原因深层分析

      本文链接:https://www.haomeiwen.com/subject/qtottqtx.html