如何以编程方式更新约束并解决登录屏幕的键盘问题

时间:2017-12-19 21:26:49

标签: ios swift

我有下一个问题。

我有这个登录屏幕

enter image description here

当登录或密码文本字段处于焦点时,我们显示键盘。键盘覆盖了我的视线。

所以我尝试用观察者制作NotificationCenter并实现方法:

@objc func kbDidShow(notification : NSNotification) {
        guard let userInfo = notification.userInfo else { return }
        let kbFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

        (self.view as! UIScrollView).contentSize = CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height + kbFrameSize.height)

        (self.view as! UIScrollView).scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: kbFrameSize.height, right: 0)
    }

因此,当键盘出现时,我正在为视图添加kb大小。此外,你可以看到我添加了scrollview。

enter image description here

我认为scrollview工作正常

BUT

当我滚动我的登录表单时,仍然通过键盘覆盖。如果我滚动到最后,我会看到我的视图会重复,因为它有渐变。

我认为,我在kb下登录表单的问题是我的最后一个按钮“Забылипароль?”具有常量92的底部约束(另一个元素我开始计算来自此按钮的约束)。当我删除它,一切正常,但我不能在没有约束的情况下工作。此外,我无法更改约束以使用顶部约束,因为对我来说从底部登录表单92pt非常重要。

解决方案我认为,将添加我的按钮的现有约束“забылипароль?”现有约束+ kb高度。

我是如何做到的?

My bytton“Забылипароль?”在名为forgetPassword

的代码中

第二个问题,当用户在焦点上设置登录或密码字段时,如何添加动画以便将我的登录表单平滑滚动到视图中心? 我需要将字段“loginPassword”设置为查看中心

2 个答案:

答案 0 :(得分:1)

将底部按钮的底部约束拖动为IBOulet

并执行此操作

    @objc func kbDidShow(notification : NSNotification) {
          guard let userInfo = notification.userInfo else { return }
          let kbFrameSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue     

           self.buttonBottomcon.constant = kbFrameSize.height

           UIView.animateWithDuration(1.0,
          {

              self.view.LayoutIfNeeded()

          }

     }

隐藏键盘时

 @objc func kbWillHide(notification : NSNotification) {

       self.buttonBottomcon.constant = 0

       UIView.animateWithDuration(1.0,
      {

          self.view.LayoutIfNeeded()

      }

 }

答案 1 :(得分:1)

write this code solve your problem:-
   NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardHideShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
   NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardHideShow), name: Notification.Name.UIKeyboardWillHide, object: nil)

   @objc func keyboardHideShow()
   {
       self.constraintHeightHeader.constant = (self.topconstraint.constant == new_value) ? old_value : new_value
   }