如何使用 RxSwift 在 RxKeyboard 实例上调用 debounce?

问题描述 投票:0回答:1

这就是我的代码中的内容:

RxKeyboard.instance.visibleHeight.drive(onNext: { [weak self] value in
    // do sth with value
}).disposed(by: disposeBag)

但是这被调用了两次,值为:291, 336。因此我的观点发生了跳跃。当我专注于 UITextField 时,就会发生这种情况。键盘已经在屏幕上,但被调用了两次。为什么?有办法去除吗?我认为这将是可能的:

.debounce(.milliseconds(100), scheduler: MainScheduler.instance)

但它不适用于 RxKeyboard。

ios swift rx-swift
1个回答
0
投票

这个问题很可疑,因为 RxKeyboard 使用

UIResponder.keyboardFrameEndUserInfoKey
来获取键盘框架,KVO 会给你键盘的最终高度。我尝试重现,但没有成功,键盘似乎在设置上被切换了
Predictive

但是,您可能想尝试这些解决方法。

  1. 使用
    debounce
    作为您的原始问题:
RxKeyboard.instance.visibleHeight
    .asObservable()
    .debounce(.milliseconds(300), scheduler: MainScheduler.instance)
    .subscribe(onNext: { height in
        ...
    })
    .disposed(by: disposeBag)
  1. KVO 发射了两次,因此您可以忽略第一个。
RxKeyboard.instance.visibleHeight
    .asObservable()
    .skip(1)
    .observe(on: MainScheduler.instance)
    .subscribe(onNext: { height in
        ...
    })
    .disposed(by: disposeBag)
© www.soinside.com 2019 - 2024. All rights reserved.