UIScrollView : UIEdgeInsets 仅适用于“顶部”和“左侧”

Posted

技术标签:

【中文标题】UIScrollView : UIEdgeInsets 仅适用于“顶部”和“左侧”【英文标题】:UIScrollView : UIEdgeInsets works only from "Top" and "Left" 【发布时间】:2016-02-03 18:47:58 【问题描述】:

我正在实现此方法来重新定位 UIScrollView 以显示被键盘弹出窗口遮挡的 UITextField:

Move a view up only when the keyboard covers an input field

滚动视图没有按预期从底部移动键盘高度。变量 'keyboardSize!.height' 正在接收正确的高度值,如果我在 'bottom' 参数中输入随机值,我会得到相同的结果。但是,如果我向 'top' 和 'left' 参数添加值,它们会在调用 keyboardWasShown 函数时移动滚动视图。

let contentInsets : UIEdgeInsets = UIEdgeInsets(top : 0.0, left : 0.0, bottom : keyboardSize!.height, right : 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets

我在 TableViewController 上可以正常工作,但在 UIScrollView 上却不行。在这种情况下, UIViewController 有一个 UIView 和一个 UIScrollView 在它上面分层。任何帮助表示赞赏。

* 编辑 *

这个问题是由 IB 中的含糊限制造成的。重置它们并使用建议的约束后, UIScrollView 工作正常。最初,顶部约束是相对于 UINavigationBar 而不是视图顶部设置的。

【问题讨论】:

【参考方案1】:

您需要在滚动视图中将文本字段向上滚动到键盘上方

  CGRect visibleRect = CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: self.view.frame.size.height - keyboardSize?.height ?? 0);

  [scrollView setContentOffset:visibleRect.center animated:YES];

【讨论】:

谢谢,但事实证明问题是约束,我不必更改代码

以上是关于UIScrollView : UIEdgeInsets 仅适用于“顶部”和“左侧”的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 内的 UIScrollView 时滚动

UIScrollView里面的UIScrollView:滚动

问题:UIScrollview 弹跳使父 UIScrollview 弹跳

UIScrollView 嵌入其他 UIScrollView

分页 UIScrollView 内的 UIScrollView

UIScrollView