这就是我的代码中的内容:
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。
这个问题很可疑,因为 RxKeyboard 使用
UIResponder.keyboardFrameEndUserInfoKey
来获取键盘框架,KVO 会给你键盘的最终高度。我尝试重现,但没有成功,键盘似乎在设置上被切换了Predictive
。
但是,您可能想尝试这些解决方法。
debounce
作为您的原始问题:RxKeyboard.instance.visibleHeight
.asObservable()
.debounce(.milliseconds(300), scheduler: MainScheduler.instance)
.subscribe(onNext: { height in
...
})
.disposed(by: disposeBag)
RxKeyboard.instance.visibleHeight
.asObservable()
.skip(1)
.observe(on: MainScheduler.instance)
.subscribe(onNext: { height in
...
})
.disposed(by: disposeBag)