ios - 带有 RxCocoa 的 UITableView 没有正确观察 contentOffset 属性
问题描述
我在使用 RxCocoa 观察 UITableView 的 contentOffset 属性时遇到问题。
我试过 RxCocoa 属性:
view.tableView.rx.contentOffset
.mapAt(\.y)
.subscribe(onNext: { print($0) })
在控制台中,我只看到(0, 0)一次,没有别的。
我试图用来自 RxCocoa 的代码替换它:
ControlProperty(
values: BehaviorSubject<CGPoint>(value: RxScrollViewDelegateProxy.proxy(for: view.tableView).scrollView?.contentOffset ?? CGPoint.zero),
valueSink: Binder(view.tableView) { scrollView, contentOffset in
scrollView.contentOffset = contentOffset
}
)
.subscribe(onNext: { print("myOffset", $0) })
并得到了相同的结果:myOffset (0, 0)一次,仅此而已。
我试图观察其他财产并没有得到任何东西:
view.tableView.rx.didScroll
.subscribe(onNext: { print(view.tableView.contentOffset) })
但。我尝试添加 Observable 间隔:
Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.subscribe(onNext: { _ in print(view.tableView.contentOffset) })
每一秒我都有不同的点:(0, 0), (0, 38), (0, 64)。
我正在使用:RxCocoa (5.0.0); RxSwift (5.0.0)
解决方案
您还没有向我们展示实际导致问题的代码。请注意,以下内容完美运行:
final class ViewController: UIViewController {
private var tableView: UITableView!
private let disposeBag = DisposeBag()
override func loadView() {
super.loadView()
tableView = UITableView(frame: view.bounds)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
view.addSubview(tableView)
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
tableView.frame = view.bounds
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.rx.contentOffset
.map { $0.y }
.bind(onNext: { print($0) })
.disposed(by: disposeBag)
Observable.just(Array.init(repeating: "Item", count: 35))
.bind(to: tableView.rx.items) { (tableView, row, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = "\(element) @ row \(row)"
return cell
}
.disposed(by: disposeBag)
}
}
推荐阅读
- servicenow - ServiceNow 中的 ITSM SKU 是什么
- angular - 打字稿组件得到“未定义”
- python - 如何递归安装python包的所有依赖项?
- ngx-translate - Renderer3 的 parseTemplate 函数不会从模板返回翻译表达式
- python - str.replace() 但 new_string 值应该来自列表
- html - CSS 网格和弹性框不起作用 - 无法移动项目?
- synchronization - 在生产者-消费者问题中访问缓冲区时是否必须使用互斥锁?
- r - 如何在管道工 API 中将 pdf 作为附件发送
- nlp - 截断 LDA 主题
- flutter - 模型类不是 int 类型的子类型