更改视图框架原点会使其反弹到位



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

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像素恰好是适合我特定用途的范围。

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

最新更新