2016-07-29 7 views
0

Ich versuche, wenn die Tastatur erscheint, die Ansicht nach oben zu verschieben. Dies funktioniert auf zwei Ansichten, aber auf der dritten derselbe Code, der die Ansicht scheinbar um einen bestimmten Betrag nach unten bewegt, und dann zurück zu dem genauen Ort bewegt wird, an dem es gestartet wurde, oder so scheint die Animation. Debugging, ich sehe nirgendwo anders das self.view.frame wird gesetzt aber diese Methode. Außerdem sehen die Offsets richtig aus, als ob die Ansicht sich wie die anderen Ansichten nach oben bewegen sollte. Sehen Sie sich die keyboardWillShow-Methode unten an.Wechselnde Ansichten Frame-Ursprung bewirkt, dass es wieder an Ort und Stelle springt

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

Verwenden Sie Auto-Layout? Es ist normalerweise eine schlechte Übung, die Ansichten zu ändern, wenn Sie das automatische Layout verwenden. –

+0

@LukePatterson Ich verwende Beschränkungen, um meine Ansichten zu gestalten. Was wäre der beste Weg, um die Ansicht zu verschieben, wenn die Tastatur in diesem Fall erscheint? – steventnorris

+1

Steven, wie wäre es, wenn Sie die Beschränkungen programmgesteuert ändern, wenn die Tastatur ein-/ausgeblendet wird –

Antwort

0

Dies ist, was ich in der Vergangenheit

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

Dies verschiebt die Ansicht nach oben auf die Position des Textview der Benutzer auf angezapft Basis getan haben. 8 und 100 Pixel waren einfach nur gute Bereiche für meinen speziellen Zweck.

Alternativ können Sie die Rahmen programmatisch anpassen, anstatt die Rahmen zu verschieben.

Verwandte Themen