更改视图框架原点会导致它弹回原位

Changing views frame origin causes it to bounce back into place

我正在尝试在出现键盘时向上移动视图。这适用于两个视图,但在第三个视图上,相同的代码导致视图似乎向下移动了一定量,然后又移回了它开始的确切位置,或者动画看起来如此。调试,除此方法外,我在其他任何地方都看不到 self.view.frame 已设置。此外,偏移看起来是正确的,就好像视图应该像其他视图一样向上移动。请参阅下面的 keyboardWillShow 方法。

func keyboardWillShow(notification: NSNotification){
    if self.origFrame == nil{
        self.origFrame = self.view.frame
    }
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue(){
        var testRect = self.view.frame
        testRect.size.height -= keyboardSize.height
        if !testRect.contains(loginBtn!.frame.origin){
            let bottomSpace = self.view.frame.size.height - loginBtn.frame.origin.y - loginBtn.frame.size.height
            let keyboardOverlap = keyboardSize.height - bottomSpace
            let newY = self.origFrame!.origin.y - keyboardOverlap
            self.view.frame.origin.y = newY
        }
    }
}

这是我过去所做的

func textViewDidBeginEditing(textView: UITextView) {
    let point:CGPoint = CGPoint(x: textView.frame.origin.x - 8, y: textView.frame.origin.y - 100)
    scrollView.contentOffset = point
}

这会根据用户点击的文本视图的位置向上移动视图。 8 和 100 像素恰好是适合我的特定目的的范围。

或者,您可以通过编程方式调整约束,而不是移动框架。