【问题标题】:how can I move my container up when user displays a screen keyboard in swift?当用户快速显示屏幕键盘时,如何向上移动容器?
【发布时间】:2016-04-19 09:05:30
【问题描述】:

我有一个UIViewController,其中嵌入了两个容器和一个文本字段。到目前为止,当用户点击文本字段时,整个屏幕向上移动,因此键盘可以适应而不覆盖容器的下部。 这是它在我的故事板中的样子:

我的代码如下:

override func viewDidLoad() {
    super.viewDidLoad()
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
     //    view.addGestureRecognizer(tap)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillChangeFrameNotification, object: nil)

}

func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {

        if(isKeyboardShown == false){
            realKeyboardSize = CGRect(x: keyboardSize.origin.x, y: keyboardSize.origin.y, width: keyboardSize.width, height: keyboardSize.height)
            isKeyboardShown = true
            self.view.frame.origin.y -= realKeyboardSize!.height
        }else{
            isKeyboardShown = false
            self.view.frame.origin.y += realKeyboardSize!.height

        }
    }
}

是否可以将下部容器向上移动而不是整个屏幕?

我想它是这样工作的:

topContainer 保持不变,lowerContainer 向上移动,一半隐藏在topContainer 后面,键盘可见。当用户隐藏键盘时,一切都会恢复正常。

【问题讨论】:

  • 你是否在使用自动布局检查stackoverflow.com/questions/31356293/…
  • 谢谢,我按照你的建议做了,并在 viewDidLoad 中添加了这些行:` NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil ) NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)` 但是现在当我点击文本字段时它完全消失了:) 我尝试只添加keyboardWillShow 和然后容器向上移动,但我没有看到键盘本身...
  • hm 现在键盘出现了,但屏幕没有向上移动。但是,当我隐藏键盘时,屏幕会下降一点,文本字段也会消失。你知道这可能是什么问题吗?
  • 到目前为止,我只在lowerContainer 中添加了约束,然后我按照您在回答中的建议做了 - 您认为这就足够了吗?

标签: ios swift uikeyboard uitapgesturerecognizer


【解决方案1】:

如果您使用自动布局,您可以通过更改底部约束运行时来实现这一点

这是您的层次结构和相关约束..

关于它的工作原理和设置方法,请查看this link

还有Here is the demo,如果你不明白

【讨论】:

    【解决方案2】:

    取出容器底部约束的出口并增加它对键盘大小的常数或取出顶部约束的出口并减少它对键盘尺寸的常数。希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-13
      • 2016-02-04
      • 2015-06-20
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多