ios - 为什么 UIScrollView 在显示键盘时不滚动?

标签 ios objective-c swift uiscrollview uitextfield

我的 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/

相关文章:

ios - 访问drawRect外部的CGContext来识别饼图上的触摸事件并识别触摸的 block

ios - 如何在swift中播放电影

ios - 将 View 放在右下角,隐藏部分,以编程方式快速 5

iOS APNS 开发 [沙盒] 与生产

iphone - 我需要做什么来配置一个新的 iPhone 项目,以便它可以被视为与 Appstore 中我当前的 iPhone 应用程序相同?

iphone - 删除高度大于其他单元格的单元格时,动画看起来很尴尬

ios - swift + 核心数据 : Can not set a Bool on NSManagedObject subclass - Bug?

iphone 地址簿 - 在 ABAddressBookGetPersonWithRecordID 中获取空项目

objective-c - 工具栏中的推送图标

ios - Swift - 如何在从另一个 segue 返回后停止表单重置