以编程方式更改UIScrollView的ContentInset实际上不会更改任何内容

时间:2018-03-12 10:29:31

标签: swift uiscrollview

我在“界面”构建器中创建了UIScrollView,现在在UIScrollView中有一个UITextField。当键盘打开时,我想更改ContentInset的{​​{1}}以适应键盘。

我之前通过一个名为UIScrollView的程序包完成了这项工作,该程序会反应性地为我提供了键盘的高度:

RXKeyboard

现在RxKeyboard.instance.visibleHeight .drive(onNext: { height in self.scrollView.contentInset.bottom = height print("offset", self.scrollView.contentInset) }).disposed(by: disposeBag) 的{​​{1}}确实发生了变化(通过打印显示),然而,实际上没有任何变化,我的ContentInset的底部被键盘隐藏了。

我在这里遗漏了什么吗?我尝试将其移至UIScrollView,我在设置插图后尝试UIScrollView,但我无法使其工作。

有没有人知道这方面的解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

没错,您已将scrollView的插图设置为键盘的高度,但是当键盘出现时,您希望将scrollView内容设置为键盘&#39 ;高度。

您必须通过调整 contentOffset 属性将scrollView滚动到键盘高度。

RxKeyboard.instance.willShowVisibleHeight
        .drive(onNext: { keyboardVisibleHeight in
            self.scrollView.contentOffset.y += keyboardVisibleHeight
        })
        .disposed(by: disposebag)

正如documentation所说,

  

内容视图的原点偏离滚动视图的原点的位置。

通过将 contentOffset.y 设置为键盘的高度,您可以告诉scrollView移动/滚动到该高度。