2017-12-19 3 views
0

次の問題があります。ログインやパスワードのテキストフィールドにフォーカスが上にあるとき制約をプログラムで更新し、ログイン画面のキーボードの問題を解決する方法

私は、このログイン画面

enter image description here

を持って、私たちは、キーボードを示します。キーボードが私の意見を覆います。

だから私は、オブザーバーと通知センターを作り、メソッドを実現しようとした:

@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) 
    } 

ので、キーボードが表示されたら、私はビューのキロバイトのサイズを追加しています。また、私はscrollviewを追加したことがわかります。

enter image description here

私はscrollviewが

しかし

私は私のログインフォームをスクロールしています、まだキーボードでオーバーレイ正しいうまくいくと思います。私が最後までスクロールすると、グラデーションがあるので、私のビューが繰り返されることがわかります。

私のログインフォームがkbの下にある理由は、最後のボタンが "Забылипароль?"定数92の下限制約があります(別の要素はこのボタンから制約を数え始めます)。私はそれを削除すると、すべて正常に動作しますが、私は下に制約なしで仕事を傾ける。また、私は下からログインフォームを92ptにすることが私にとって非常に重要であるため、上限制約を使用するように変更を変更することはできません。

解決策私の考えでは、私のボタン「забылипароль」の既存の制約を追加することでしょう。既存の制約+ kbの高さ。

どうすればいいですか?

私のbytton "Забылипароль?" forgotPasswordという名前のコードで

2番目の質問は、ユーザーがログイン時にパスワードフィールドを設定したときに、ログインフォームの円滑なスクロールをアニメーションに追加する方法です。キーボードが隠されているとき は私がIBOulet

として下のボタンの中央

答えて

0

ドラッグします下の制約を表示するには、フィールド「LOGINPASSWORD」の中心を設定し、この

@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() 

     } 

} 
+0

Ok、cool!それは私のために働くが、キーボードと同期させる方法を教えてくれますか?私は時間0.3を試しましたが、変化するconstrainstだけがkbが現れました。 – WhoIsDT

+0

再生がスムーズになるまでの継続時間で再生すると、ビューが消えるとオブザーバーを削除することも忘れないでください –

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: NSNotification.Name.UIKeyboardWillHide, object: nil) 

    @objc func keyboardHideShow() 
    { 
     self.constraintHeightHeader.constant = (self.topconstraint.constant == new_value) ? old_value : new_value 
    } 
関連する問題