2016-07-29 87 views
0

我试图在键盘出现时将视图向上移动。这适用于两个视图,但第三个视图导致视图看起来向下移动一定数量,然后移回到它开始的确切位置,或者动画看起来如此。调试,我没有看到其他地方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 
     } 
    } 
} 
+1

您使用自动布局吗?在使用自动布局时更改视图帧通常是不好的做法 –

+0

@LukePatterson我使用约束来布局视图。在这种情况下键盘出现时移动视图的最佳方式是什么? – steventnorris

+1

Steven,你如何在键盘显示/隐藏时以编程方式更改约束 –

回答

0

这是我在过去

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

做过这使基于TextView的用户轻敲的位置的观点了。 8和100像素恰好是我的特定用途的良好范围。

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