Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有RxCocoa的UITableView未正确观察contentOffset属性_Ios_Swift_Uitableview_Rx Swift_Rx Cocoa - Fatal编程技术网

Ios 带有RxCocoa的UITableView未正确观察contentOffset属性

Ios 带有RxCocoa的UITableView未正确观察contentOffset属性,ios,swift,uitableview,rx-swift,rx-cocoa,Ios,Swift,Uitableview,Rx Swift,Rx Cocoa,我在使用RxCocoa观察UITableView的contentOffset属性时遇到问题 我试过RxCocoa酒店: view.tableView.rx.contentOffset .mapAt(\.y) .subscribe(onNext: { print($0) }) 在控制台中,我只看到一次(0,0) 我尝试用RxCocoa的代码替换它: ControlProperty( values: B

我在使用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) })
但是。我尝试添加可观察的时间间隔:

Observable<Int>.interval(1, scheduler: MainScheduler.instance)
                .subscribe(onNext: { _ in print(view.tableView.contentOffset) })
Observable.interval(1,调度程序:MainScheduler.instance)
.subscribe(onNext:{正在打印(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)
    }
}

这些部分的代码包含太多自定义解决方案,因此需要抱怨:)
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)
    }
}