Wie ändere ich die Größe von Ansichten, wenn die Tastatur mit Auto Layout angezeigt wird?

7

Ich habe eine Ansicht (ein UITableView in diesem Fall, aber das ist nicht wichtig) auf meinem UIViewController , dass die Höhe geändert werden soll, wenn die Tastatur erscheint.

Was ist der beste Weg, dies in Auto Layout zu tun? Zur Zeit habe ich diese Einschränkungen:

  • Oberster Platz zum Ansehen: 0
  • Nachstellplatz zum Superview: 0
  • Führender Platz zum Superview: 0
  • Unterer Platz für Superview: 0
  • Höhe gleich = 424

Ich denke, der schnellste Weg, dies zu tun, besteht darin, die Beschränkung der Höhe und des unteren Platzes zu entfernen und die tatsächliche Ansicht im Code zu ändern, wenn keyboardDidAppear notification aufgerufen wird, aber gibt es andere Möglichkeiten?

EDIT: Ich habe die Höhenbeschränkung entfernt, meine schlechte.

    
Enrico Susatyo 02.06.2014, 06:58
quelle

3 Antworten

16

Ich würde Ihnen eine generische Idee geben, die möglicherweise für Ihr aktuelles Projekt angepasst werden muss.

Ich glaube, die UITableView *_tableView wurde irgendwo vorher richtig eingerichtet.

%Vor%

}

HINWEIS: Wenn Ihr UITTableView nicht genau am unteren Rand des Bildschirms erscheint, sollte der Wert contentInset verwendet werden in dieser Zeile verfeinert werden: [_tableView setContentInset:UIEdgeInsetsMake(0.f, 0.f, _keyboardFrame.size.height, 0.f)];

    
holex 02.06.2014, 10:08
quelle
2

Behalte deine Höhenbeschränkung und verbinde eine Steckdose damit:

%Vor%

Sehen Sie sich Beispiel 3 von diesem Tutorial an.

Aktualisieren Sie die Höhe Ihrer Ansicht, indem Sie ein Tastaturereignis mit NSNotificationCenter :

erfassen %Vor%

Sie können sich auch die akzeptierte Antwort von diese Frage für einige Inspirationen.

Am Ende sollten Sie so etwas bekommen:

%Vor%     
Nhon Nguyen 02.06.2014 07:46
quelle
0

Als Erstes sollten Sie keine Oben-Unten-Bedingung und keine Höhenbeschränkung hinzufügen. Wenn sich die Bildschirmgröße ändert, stürzt die App ab (es sei denn, eine der Einschränkungen hat eine niedrigere Priorität, in diesem Fall wird sie entfernt).

Zweitens ändern Sie in Ihrer keyboardDidAppear-Benachrichtigungsmethode einfach den unteren Bereich in den Superview-Konstantenwert und rufen [myView setNeedsDisplay]

auf

Bearbeiten: Nach setFirstResponder wird das SetNeedsDisplay nicht ausgeführt. Sie fügen self als Beobachter für keyboardWillShow / keyboardWillHide Benachrichtigungen hinzu, und bei dieser Methode aktualisieren Sie die Einschränkung und rufen setNeedsDisplay auf.

Sehen Sie sich diesen Apple-Beitrag an , Listing 5-1 Handling the keyboard notifications und Listing 5-2 Additional methods for tracking the active text field stellen den Code zur Verfügung.

    
Lord Zsolt 02.06.2014 07:03
quelle