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

时间:2015-04-10 14:32:53

标签: ios objective-c swift uiscrollview uitextfield

我的UIScrollView中有一个UITextField。这是在显示键盘时滚动视图的代码,以便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)
    }
}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

当我在故事板中使用AutoLayout进行滚动视图时出现此问题,问题是即使您以编程方式设置其内容大小,UIScrollView与AutoLayout也不知道其内容大小,其内容大小是根据应用的约束推断的如果你在滚动视图内容中有很多子视图,它可能会非常混乱,所以我通过将scrollview中的所有子视图添加到根视图并将此根视图添加为滚动视图的内容来解决问题,当然将此根视图的顶部,左侧,底部,右侧,宽度和高度固定到滚动视图,这样滚动视图就可以准确地知道其内容视图的大小,这是Apple发布的关于此问题的技术说明{{3} }

希望这有帮助!

答案 1 :(得分:0)

我在m.eldehairy回答后找到了解决方案。

// I add all my subviews in a contentView with a predefined HEIGHT and WIDTH
let contentView = UIView(frame: CGRect(x: 0, y: 0, width: WIDTH, height: HEIGHT))
contentView.addSubview(view1)
contentView.addSubview(view2)
    ...

// I embed my contentView in the scrollView, and set its content size
myScrollView.addSubview(contentView)
myScrollView.contentSize = CGSizeMake(WIDTH, HEIGHT)

有效。