2017-11-15 8 views
0

それを修正する方法がわからない、ぎこちなくすべての単一のテキストフィールドにジャンプしているようだここで何が起こっているのGIFだ:UIViewのは、キーボードで上にスクロール持つとき、それは

enter image description here

ここでの機能です。

func getKeyboardHeight(_ notification:Notification) -> CGFloat { 
    let userInfo = notification.userInfo 
    let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue 
    return keyboardSize.cgRectValue.height 
} 


func keyboardWillShow(_ notification:Notification) { 
    view.frame.origin.y = -getKeyboardHeight(notification) 
} 

func keyboardWillHide(_ notification:Notification) { 
    view.frame.origin.y = 0 
} 


func subscribeToKeyBoardNotifications(){ 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil) 
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil) 
} 

最初のテキスト入力タップでは完全に機能しますが、その下にあるものをタップすると、ビューの種類が「ジャンプ」してしまい、非常に視覚的にびっくりするようになります。

また、yの起点を調整するためにview.frame.origin.y == 0であるかどうかをチェックしようとしましたが、最初のテキストボックスの起点が-4であり、 92(本当に私には意味がありません)、私はこれをさまざまなビューで使い、起源をハードコードしたくありません。

+0

にAttributeInspectorプロパティの「AdjustScrollViewInsets」を設定? https://github.com/hackiftekhar/IQKeyboardManager –

+0

これは実際には画面上の灰色のバーです。以前はうまくいきましたが、新しいiOSリリース以来ではありません。また、私はまだキーボードをビューをシフトさせて、ユーザーが2つ以上のフィールドを選択できるようにすることを好みます。 – VDog

+0

テキストフィールドのプロパティを設定する他のコードを実行していますか?編集開始など?キーボードタイプを設定していますか? '.inputAccessoryView'を複数回設定していますか? – DonMag

答えて

0

キーボードがUIScrollViewに表示され、BottomLayoutGuidに下部の制約を設定したときに、スクロールしたいコンテンツ(スクロールする必要があるコンテンツのみ)を追加することをお勧めします。コントローラへのコンセントを取得します。ストーリーボードの関連のUIViewControllerに、なぜあなたはこれが代わりに使用していない未確認

@IBOutlet weak var scrollViewBottomCons  : NSLayoutConstraint! 
let scrollViewBottomConsNormalValue   : CGFloat!    = 50     // assuming its storyboard value is 50 

func keyboardWillShow(_ notification:Notification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if scrollViewBottomCons.constant == scrollViewBottomConsNormalValue { 
      self.scrollViewBottomCons.constant      = keyboardSize.height 
      self.navigationController?.isNavigationBarHidden  = true     // assuming its current state is true 
     } 
    } 
} 

func keyboardWillHide(_ notification:Notification) { 
    if let _ = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if scrollViewBottomCons.constant != scrollViewBottomConsRealValue { 
      self.scrollViewBottomCons.constant      = scrollViewBottomConsRealValue 
      self.navigationController?.isNavigationBarHidden  = true     // assuming its current state is true 
     } 
    } 
} 
関連する問題