2016-07-29 1 views
0

キーボードが表示されたら、ビューを上に移動しようとしています。これは2つのビューで動作しますが、3つ目のコードでは、ビューが一見一定量下に移動してから、開始した正確な場所に戻るか、アニメーションが表示されます。デバッグすると、self.view.frameは設定されていませんが、このメソッドはありません。さらに、オフセットは他のビューと同様にビューが上に移動するように見えます。以下のkeyboardWillShowメソッドを参照してください。ビューフレームの原点を変更すると、元の位置に戻ってきます

func keyboardWillShow(notification: NSNotification){ 
    if self.origFrame == nil{ 
     self.origFrame = self.view.frame 
    } 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue(){ 
     var testRect = self.view.frame 
     testRect.size.height -= keyboardSize.height 
     if !testRect.contains(loginBtn!.frame.origin){ 
      let bottomSpace = self.view.frame.size.height - loginBtn.frame.origin.y - loginBtn.frame.size.height 
      let keyboardOverlap = keyboardSize.height - bottomSpace 
      let newY = self.origFrame!.origin.y - keyboardOverlap 
      self.view.frame.origin.y = newY 
     } 
    } 
} 
+1

自動レイアウトを使用していますか?自動レイアウトを使用するときは、通常、ビューのフレームを変更するのは悪い習慣です。 –

+0

@LukePatterson私はビューをレイアウトするために制約を使用します。その場合、キーボードが表示されたときにビューを移動するにはどうすればよいでしょうか? – steventnorris

+1

Steven、キーボードの表示/非表示時にプログラムで制約を変更するのはどうですか? –

答えて

0

これは、私はこれは上のタップのTextViewユーザの位置に基づいてビューを上に移動し、過去

func textViewDidBeginEditing(textView: UITextView) { 
    let point:CGPoint = CGPoint(x: textView.frame.origin.x - 8, y: textView.frame.origin.y - 100) 
    scrollView.contentOffset = point 
} 

で行われてきたものです。私の特定の目的のために、8と100ピクセルがちょうど良い範囲になりました。

また、フレームを移動する代わりに、プログラムで制約を調整することもできます。

関連する問題