0


iOS 解决UIScrollView嵌套UITableView问题(避免滑动冲突)

关于这个嵌套滑动问题,目前网上大部分的方法都是自己写手势监听,实现起来太过繁琐,最近遇到了同样的问题,写了一个比较简单的方法

原理

内部的TableView可以滚动,外部的ScrollView也可以滚动,所以才会有滚动冲突。如果内部TableView的高度就等于自身高度,就只有外部一个ScrollView滚动了。
那么这个高度如何获取呢

首先,自己手动计算 直接pass,太麻烦,还容易出bug

ScrollView有一个属性叫做ContentSize,TableView作为ScrollView的子类自然也是有的,那么这个ContentSize.height就是tableView内部视图的高度了,但是如何确保这个值获取的时机准确呢
因为我项目tableView的数据是在接口请求后才能获取到,而tableView的reloadData方法是异步方法,所以直接写在reloadData后面是不行的,只会获取到0
于是我简单的重写了一下TableView 添加了一个回调闭包,这个闭包会在视图加载完成之后调用,这个时候的ContentSize可以保证是最新数值。

classMyTableView:UITableView{var reloadCompletion:(()->Void)?overridefunclayoutSubviews(){super.layoutSubviews()
        reloadCompletion?()}}

需要注意滚动过程中这个回调会执行多次,contentSize会逐渐增大,但是最终会达到最大值(实际内部尺寸)

myTableView.reloadCompletion ={[weakself]inlet size =self?.myTableView.contentSize
    self?.myTableView.snp.updateConstraints { make in
        make.height.equalTo(size?.height ??0)}}

然后运行后发现tableView的高度已经是内部视图的高度了。因为高度相等,所以本身不可滑动,会随着外部的ScrollView一起滑动。

标签: ios swift

本文转载自: https://blog.csdn.net/weixin_43925616/article/details/137786152
版权归原作者 小树羽 所有, 如有侵权,请联系我们删除。

“iOS 解决UIScrollView嵌套UITableView问题(避免滑动冲突)”的评论:

还没有评论