2017-10-17 109 views
0

我正在处理当键盘覆盖刚获得第一响应者的元素时移动视图的问题。我开始看着this question,这给了我一个很好的开局。 加入观察员UIKeyboardWillShowUIKeyboardWillHide我用下面的代码结束后:当键盘出现时管理UIView

func keyboardWillShow(notification: Notification) { 

     guard let userInfo = notification.userInfo, 
       let kbRect = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue, 
       let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double else { 
      return 
     } 

     let kbSize = kbRect.cgRectValue.size 

     UIView.animate(withDuration: duration) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: -kbSize.height) 
     } 
    } 

    func keyboardWillHide(notification: Notification) { 
     UIView.animate(withDuration: 0.3) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: 0) 
     } 
    } 

,视图和上下移动它的工作原理在这个意义很好,当文本字段涨幅第一响应者。 但是,当按下某个键时,视图会再次移动,从而失去了将其向上移动的目的。 为了更好地描述这种不良行为,我做了一个小GIF,第一次键盘出现和消失显示正确的行为,第二次,当按下一个键时,显示不需要的行为。

problem presented

所以,问题是,有没有办法可以防止性视图移动时按下某个键?我希望视图在用户使用键盘插入文本时保持“向上”。

+0

你是如何设置这张图片的?那里有什么限制? –

+0

@Lu_它发生在我的每一个视图上,那个图像我只是一个测试UIView我做的,以说明我遇到的问题。对图像的约束只是顶部,引导和追踪到超级查看,一个到底部的文本字段,所有的值都是8 –

回答

0

你应该将视图的应用程序,而不是改变它,使用:

self.view.frame.origin.y -= kbSize.height 

转化应该表现得像它是现在

0

设置你的UIView作为一个出口与插入此代码viewDidLoad中

yourView.translatesAutoresizingMaskIntoConstraints = true