2016-04-19 8 views
0

Ich habe eine UIViewController mit zwei eingebetteten Containern und einem Textfeld. Wenn der Benutzer auf das Textfeld tippt, bewegt sich der gesamte Bildschirm nach oben, so dass die Tastatur passen kann, ohne den unteren Teil der Behälter abzudecken. Dies ist, wie es in meiner Geschichte Board aussieht:Wie kann ich meinen Container nach oben bewegen, wenn der Benutzer eine Bildschirmtastatur in swift anzeigt?

enter image description here

Mein Code sieht wie folgt aus:

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 

     } 
    } 
} 

Ist es möglich, den unteren Behälter, statt des gesamten Bildschirms zu bewegen?

Ich stelle mir das so funktioniert:

topContainer bleibt unberührt, lowerContainer bewegt sich nach oben, so dass die Hälfte davon hinter topContainer verborgen ist und die Tastatur sichtbar ist. Wenn der Benutzer die Tastatur versteckt, wird alles wieder normal.

+0

verwenden Sie die automatische Layoutprüfung http://stackoverflow.com/questions/31356293/uitableview-and-uiview-with-keyboardwillshow/31356527#31356527 –

+0

danke, ich tat, was Sie vorgeschlagen und hinzugefügt Diese Zeilen in viewDidLoad: 'NSNotificationCenter.defaultCenter(). addObserver (self, Selektor: Selector (" keyboardWillShow: "), Name: UIKeyboardWillShowNotification, Objekt: nil) NSNotificationCenter.defaultCenter(). addObserver (self, Selektor: Selector (" keyboardWillHide : "), Name: UIKeyboardWillHideNotification, Objekt: nil)' Aber jetzt, wenn ich auf das Textfeld tippe, verschwindet es komplett :) Ich habe versucht, nur 'keyboardWillShow' hinzuzufügen und dann bewegt sich der Container nach oben, aber ich sehe die Tastatur selbst nicht. – user3766930

+0

hm für jetzt erscheint die Tastatur, aber der Bildschirm bewegt sich nicht nach oben. Wenn ich jedoch die Tastatur verberge, wird der Bildschirm etwas dunkler und das Textfeld verschwindet. Weißt du, was hier das Problem sein könnte? – user3766930

Antwort

1

Wenn Sie automatisches Layout verwenden, können Sie dies erreichen, indem untere Einschränkung Laufzeit zu ändern

Hier sind Ihre Hierarchie und damit verbundene Einschränkungen ..

enter image description here

Für wie es funktioniert und wie die Dinge zu Setup überprüfen this link

und Here is the demo, wenn Sie nicht verstehen,

1

nehmen Sie den unteren Grenzwert des Containers heraus und erhöhen Sie dessen Konstante auf die Tastaturgröße oder nehmen Sie den Ausgang der oberen Constraint-Einstellung und verringern Sie die Konstante auf die Tastaturgröße. hoffe, das wird helfen :)