2016-09-26 2 views
0

Ich arbeite an einer benutzerdefinierten Tastatur mit einer eigenen Ansicht, die ich im Interface Builder bearbeite.Wie wird eine programmatisch hinzugefügte Ansichtsgröße zur übergeordneten Ansicht hinzugefügt?

Die Ansicht wird beim Laden der Tastatur-Stammansicht programmgesteuert hinzugefügt. Es enthält Stapelansichten und füllt die gesamte Ansicht automatisch aus.

Das Problem ist, dass die Tastaturansicht nicht an die Ansicht der App angepasst wird. Scheint, als hätte sie eine feste Größe, denn wenn ich den Simulator horizontal rotiere, kann ich mehr Breite und weniger vertikal sehen .

Wie wird die Größe der Breite der Root-Ansicht angepasst, in der sie platziert ist?

Hier ist, wie die Tastatur im Interface Builder sieht und in einem Simulator laufen iPhone 5S:

sizes

+1

Bitte fügen Sie einen Screenshot hinzu, um zu zeigen, wie es gerade aussieht. –

Antwort

-2

Versuchen Sie diese Benachrichtigungen zu implementieren?

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardFrameWillChange:) 
              name:UIKeyboardWillShowNotification 
             object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardFrameWillChange:) 
              name:UIKeyboardWillChangeFrameNotification 
             object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
              name:UIKeyboardWillHideNotification 
             object:nil]; 

Dann, wenn diese Meldungen genannt werden, die Größe Ihrer Ansicht auf die Tastaturrahmen

CGRect keyboardFrame; 
[[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame]; 

CGRect viewFrame = keyboardFrame; 
+0

Diese Frage ist markiert Swift, nicht Objective-C. – Moritz

0

Zuerst müssen wir einen Haken in Größenänderungen von Layout-Änderungen erhalten, könnten wir dies tun, wie so:

override var bounds: CGRect { 
    didSet { 
     print("Bounds have changed: \(bounds)") 
    } 
} 

Dies sollte in Ihrer benutzerdefinierten Tastaturansicht verwendet werden. Als nächstes möchten wir das benutzerdefinierte Tastaturlayout aktualisieren. Wenn Sie sich Ihre Screenshots ansehen, müssen Sie lediglich die Höhe und Breite der Tasten anpassen. Später können Sie Anpassungen aufgrund von Änderungen der Größenklasse hinzufügen, um mehr Kontrolle über das Layout zu erhalten. Sie müssen einen Verweis auf die Höhen- und Breiteneinschränkung beibehalten, indem Sie @IBOutlets verwenden oder indem Sie Ihre Teilansichten durchlaufen und die Breiten- und Höhenbeschränkungen manuell finden und ändern, beides kann mühsam sein, aber die Verwendung der @IBOutlets ist einfacher.

func updateKeys() { 
    DispatchQueue.main.async { 
     // Create array of width constraints 
     let widthConstraints: [NSLayoutConstraint] = widthArray() 
     widthConstraints.forEach { _ in /* change width constant for current layout */ } 

     // Create array of height constraints 
     let heightConstraints: [NSLayoutConstraint] = heightArray() 
     heightConstraints.forEach { _ in /* change height constant for current layout */ } 

    } 
} 

Dies ist nur ein Weg, zu tun, finde ich, dass mit Auto-Layout immer ein, dass eine Möglichkeit, es mit komplexen Layouts zu tun, gibt es, aber es sollte Ihnen ein Muster zeigen, die Sie verwenden können.

Verwandte Themen