Die Höhe im Hochformat und die Höhe in der Landschaft gemessen in Punkten.
Die Höhe im Hochformat und die Höhe in der Landschaft gemessen in Punkten.
Antworten:
Ich habe den folgenden Ansatz verwendet, um den Rahmen der Tastatur in iOS 7.1 zu bestimmen.
In der Init-Methode meines View Controllers habe ich mich registriert für UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
Dann habe ich den folgenden Code verwendet keyboardOnScreen:
, um Zugriff auf den Rahmen der Tastatur zu erhalten. Dieser Code ruft das userInfo
Wörterbuch aus der Benachrichtigung ab und greift dann auf das NSValue
zugehörige zu UIKeyboardFrameEndUserInfoKey
. Sie können dann auf CGRect zugreifen und es in die Koordinaten der Ansicht Ihres Ansichtscontrollers konvertieren. Von dort aus können Sie alle erforderlichen Berechnungen basierend auf diesem Frame durchführen.
-(void)keyboardOnScreen:(NSNotification *)notification
{
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
}
Schnell
Und die äquivalente Implementierung mit Swift:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification) {
guard let info = notification.userInfo else { return }
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
}
Denken Sie daran, dass unter iOS 8 die Größe der Bildschirmtastatur variieren kann . Gehen Sie nicht davon aus, dass die Bildschirmtastatur immer sichtbar (mit einer bestimmten Höhe) oder unsichtbar ist.
Mit iOS 8 kann der Benutzer jetzt auch den Textvorhersagebereich ein- und ausschalten ... und wenn er dies tut, wird das keyboardWillShow
Ereignis einer App erneut gestartet .
Dadurch werden viele ältere Codebeispiele zerstört, in denen empfohlen wurde, ein keyboardWillShow
Ereignis zu schreiben , das lediglich die aktuelle Höhe der Bildschirmtastatur misst, und die Steuerelemente auf der Seite um diesen (absoluten) Betrag nach oben oder unten zu verschieben.
Mit anderen Worten, wenn Sie einen Beispielcode sehen, der Sie lediglich auffordert, einen hinzuzufügen keyboardWillShow
Ereignis , die Tastaturhöhe zu messen und die Höhe Ihrer Steuerelemente um diesen Betrag zu ändern, funktioniert dies nicht mehr immer.
In meinem obigen Beispiel habe ich den Beispielcode von der folgenden Site verwendet, der die vertikalen Einschränkungen animiert constant
Wert für .
In meiner App habe ich eine Einschränkung zu meiner hinzugefügt UITextView
, die am unteren Bildschirmrand festgelegt ist. Als der Bildschirm zum ersten Mal angezeigt wurde, habe ich diesen anfänglichen vertikalen Abstand gespeichert.
Jedes Mal, wenn mein keyboardWillShow
Ereignis gestartet wird, füge ich die (neue) Tastaturhöhe zu diesem ursprünglichen Einschränkungswert hinzu (damit die Einschränkung die Höhe des Steuerelements ändert).
Ja. Es ist hässlich.
Und ich bin ein wenig verärgert / überrascht, dass das schrecklich schmerzhafte AutoLayout von XCode 6 es uns nicht nur ermöglicht, die unteren Steuerelemente entweder am unteren Bildschirmrand oder am oberen Rand der Bildschirmtastatur anzubringen.
Vielleicht fehlt mir etwas.
Anders als meine geistige Gesundheit.
Die Tastaturhöhe beträgt 216 Punkte für den Hochformatmodus und 162 Punkte für den Querformatmodus.
Versionshinweis: Dies ist in iOS 9 und 10 kein Wert mehr, da sie benutzerdefinierte Tastaturgrößen unterstützen.
Dies hängt vom Modell und der QuickType-Leiste ab:
Die Höhe der Tastatur hängt vom Modell, der QuickType-Leiste, den Benutzereinstellungen usw. ab. Der beste Ansatz ist die dinamische Berechnung:
Swift 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func keyboardShown(notification: NSNotification) {
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
}
}
Ich kann die neueste Antwort nicht finden, daher überprüfe ich alles mit dem Simulator. (IOS 11.0)
Gerät | Bildschirmhöhe | Porträt | Landschaft
iPhone 4s | 480.0 | 216,0 | 162.0
iPhone 5, iPhone 5s, iPhone SE | 568,0 | 216,0 | 162.0
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667,0 | 216,0 | 162.0
iPhone 6 plus, iPhone 7 plus, iPhone 8 plus | 736,0 | 226,0 | 162.0
iPad 5. Generation, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265,0 | 353.0
Vielen Dank!
iPhone
Tastaturgrößen:
2,6 S, 6,7,8: (375 × 667): Tastaturgröße = (0,0, 407,0, 375,0, 260.
3,6 +, 6S +, 7+, 8+: (414 × 736) Tastaturgröße = (0,0, 465,0, 414,0, 271,0)
4.XS, X: (375 x 812) Tastaturgröße = (0,0, 477,0, 375,0, 335,0)
5.XR, XSMAX ((414 x 896) Tastaturgröße = (0,0, 550,0, 414,0, 346,0)