ToB企服应用市场:ToB评测及商务社交产业平台
标题:
iOS 办理UIScrollView嵌套UITableView问题(避免滑动冲突)
[打印本页]
作者:
知者何南
时间:
2024-8-11 09:15
标题:
iOS 办理UIScrollView嵌套UITableView问题(避免滑动冲突)
关于这个嵌套滑动问题,目前网上大部分的方法都是自己写手势监听,实现起来太过繁琐,近来遇到了同样的问题,写了一个比较简朴的方法
原理
内部的TableView可以滚动,外部的ScrollView也可以滚动,所以才会有滚动冲突。如果内部TableView的高度就即是自身高度,就只有外部一个ScrollView滚动了。
那么这个高度怎样获取呢
首先,自己手动盘算 直接pass,太贫苦,还容易出bug
ScrollView有一个属性叫做
ContentSize
,TableView作为ScrollView的子类天然也是有的,那么这个ContentSize.height就是tableView内部视图的高度了,
但是怎样确保这个值获取的时机准确呢
由于我项目tableView的数据是在接口哀求后才气获取到,而tableView的reloadData方法是
异步方法
,所以直接写在reloadData背面是不行的,只会获取到0
于是我简朴的重写了一下TableView 添加了一个回调闭包,这个闭包会在视图加载完成之后调用,这个时候的ContentSize可以包管是最新数值。
class MyTableView: UITableView {
var reloadCompletion: (() -> Void)?
override func layoutSubviews() {
super.layoutSubviews()
reloadCompletion?()
}
}
复制代码
需要注意滚动过程中这个回调会执行多次,contentSize会渐渐增大,但是终极会到达最大值(现实内部尺寸)
myTableView.reloadCompletion = { [weak self] in
let size = self?.myTableView.contentSize
self?.myTableView.snp.updateConstraints { make in
make.height.equalTo(size?.height ?? 0)
}
}
复制代码
然后运行后发现tableView的高度已经是内部视图的高度了。由于高度相等,所以本身不可滑动,会随着外部的ScrollView一起滑动。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4