iPad Split-Tastatur

Ich erstelle eine App, die der iMessage-App des iPad ähnelt und Messaging ausführt. Es gibt also eine Eingabeansicht, die am unteren Rand der Nachrichtenansicht und der Eingabezubehöransicht verankert ist, wenn die Tastatur angezeigt wird. Außerdem muss die Größe der Nachrichtenansicht korrekt angepasst werden, wenn die Tastatur im angedockten oder nicht angedockten Zustand angezeigt wird.

Das Problem, das ich habe, ist, dass die Benachrichtigungsdaten, die von UIKeyboardWillChangeFrameNotification eingehen, nicht konsistent sind.

Erstens gibt es drei Möglichkeiten, wie der Benutzer die Tastatur abdocken kann:

Halten Sie die untere rechte Taste gedrückt und schieben Sie sie nach obenHalten Sie die untere rechte Taste gedrückt und wählen Sie "Abdocken", wenn das Menü angezeigt wird.Halten Sie die untere rechte Taste gedrückt und wählen Sie "Teilen", wenn das Menü angezeigt wird.

Für Fall 1 sind die Benachrichtigungsdaten von UIKeyboardWillChangeFrameNotification konsistent. Hier sind die Daten:

userInfo = {
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
}

Für die Fälle 2 und 3 sind die Daten inkonsistent. Ich erhalte folgende Informationen:

userInfo = {
    UIKeyboardAnimationCurveUserInfoKey = 0;
    UIKeyboardAnimationDurationUserInfoKey = "0.25";
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 872}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1136}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
    UIKeyboardFrameChangedByUserInteraction = 0;
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, -264}, {768, 304}}";
}

Merkwürdig ist, dass die Daten beim Abhören von UIKeyboardDidChangeFrameNotification in Fall 2 oder 3 wie erwartet eingehen:

userInfo = {
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
}

Warum unterscheiden sich die Benachrichtigungsdaten? Hat jemand einen klaren Weg gefunden, um die Split-Keyboard-Ereignisse zu erkennen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage