UIScrollView:ViewController 视图框架更改后滚动内容

UIScrollView: Scrolling content after ViewController View frame change

简而言之……我可以滚动内容,但是在更改 ViewController 视图框架(框架 Origin Y 值是减少,因此 VC 视图向上移动以容纳键盘)。

在 Storyboard ViewController 上,我添加了一个 UIScrollview 和它下面的一个按钮。滚动视图受限于其父视图(VC)。我在滚动视图中添加一个 contentView 并将其约束到滚动视图,并在内容视图和滚动视图父视图之间添加相等的宽度和高度约束。然后我将文本字段添加到 contentView 并将它们约束到 contentView。我计算并设置了 scrollView 内容大小,因此我只能滚动内容而不是整个 contentView。到目前为止一切顺利。

我注册了键盘通知,在键盘中将显示处理程序我减少了视图控制器的视图原点 Y 值(通过 setFrame),这将视图向上移动,因此视图底部刚好位于键盘上方。同样在 keyboardWillShow 处理程序中,我将 scrollview contentsize 增加了键盘的垂直高度,因为 scrollView 区域已经减少了键盘的垂直高度。

我能够滚动内容,但是 contentoffset (0,0) 位于内容的中间位置,并且额外的 contentsize 显示在文本字段内容下方。我不再能够向上滚动到内容的顶部。

我知道 scrollView 通过改变它的边界来滚动它的内容所以我尝试改变滚动视图框架(减少它的原点 Y 值)并且也对 contentview 做了同样的尝试但是当 contentView 中的一个文本字段变成 FirstResponder或者我只是尝试用鼠标滚动,内容向下滚动,内容的上半部分不可见且无法滚动到(如前所述,contentoffset 是 (0,0) 内容的一半,并且是 "the top of the content".

有没有人发现我的方法有任何明显的问题,即在显示键盘的情况下继续滚动所有内容并且 ViewController 原始 Y 值降低?

我需要添加 contentInsets 和 scrollIndicatorInsets。这里有很棒的文章... https://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/