【发布时间】:2017-07-24 22:14:25
【问题描述】:
所以我的 iOS 应用程序在故事板中设置了一个 UIScrollview,它使用自动布局将顶部、底部、前导和尾随约束绑定到超级视图。在滚动视图内部,我有多个 UITextview 垂直堆叠的 stackview。滚动视图的内容大小设置得很好,我什至可以上下滚动。
现在,我的问题与键盘处理有关。我处理键盘的方式与苹果文档中推荐的相同:Apple's Keyboard handling documentation
下面显示的特定代码仅供参考,但它几乎只是 Apple 示例的复制粘贴:
func keyboardDidShow(notification: NSNotification){
var info = notification.userInfo!
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
var aRect : CGRect = self.view.frame
aRect.size.height -= keyboardSize!.height
if self.activeTextView != nil {
if (!aRect.contains(self.activeTextView!.bounds)){
self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true)
}
}
}
我的键盘处理代码适用于 UITextFields,但不适用于 UITextFields。 self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true) 被调用但没有滚动发生。
我研究了一下,发现 Apple 不建议将 UITextView 嵌入到 uiscrollview 中:Placing a text view inside of a scroll view
在滚动视图中放置一个文本视图。文本视图处理它们自己的滚动。您不应该在滚动视图中嵌入文本视图对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。
但是,我真的需要这种“自动”滚动到隐藏的 textview 以与 UITextFields 一样工作。有什么建议吗??
PS:我应该提一下,我不介意在 UITextViews 中禁用滚动,因为我已经使用自动布局自动调整 UITextViews 以适应其内容大小。
【问题讨论】:
标签: ios iphone uiscrollview uitextview