我的 UIScrollView 中有一个 UITextField。这是显示键盘时 ScrollView 的代码,以便 UITextField 保持可见:
func keyboardWasShown(aNotification:NSNotification) {
let info: NSDictionary = aNotification.userInfo!
let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue
let keyboardSize: CGSize = value.CGRectValue().size
let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0)
theScrollView.contentInset = contentInsets
theScrollView.scrollIndicatorInsets = contentInsets
var aRect: CGRect = self.view.frame
aRect.size.height -= keyboardSize.height
let activeTextFieldRect: CGRect? = nicknameLabel?.frame
let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin
if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) {
theScrollView.scrollRectToVisible(activeTextFieldRect!, animated:true)
}
}
我做错了什么?
最佳答案
当我在带有 AutoLayout 的 Storyboard 中有一个 ScrollView 时,我遇到了这个问题,问题是带有 AutoLayout 的 UIScrollView 不知道它的内容大小,即使你以编程方式设置它的内容大小,它的内容大小是从应用的约束中推断出来的到它的内容 View ,如果 ScrollView 内容中有很多 subview ,它可能会非常困惑,所以我通过将 ScrollView 中的所有 subview 添加到 Root View 并将这个 Root View 添加为我的 ScrollView 的内容来解决这个问题,当然还有将此 Root View 的顶部、左侧、底部、右侧、宽度和高度固定到 ScrollView ,这样 ScrollView 就会准确知道其内容 View 的大小,这是苹果发布的关于此问题的技术说明 https://developer.apple.com/library/ios/technotes/tn2154/_index.html
希望对您有所帮助!
关于ios - 为什么 UIScrollView 在显示键盘时不滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29564123/