Check for split keyboard

后端 未结 4 1474
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-13 11:08

As many of you know iOS 5 introduced a slick split keyboard for thumb-typing. Unfortunately, I have some UI that is dependent on the normal full-screen keyboard layout. One

相关标签:
4条回答
  • 2020-12-13 11:24

    This is the solution which works with iPad split keyboards (originally from the blog linked in Zeeshan's comment)

    [[NSNotificationCenter defaultCenter] 
      addObserverForName:UIKeyboardDidChangeFrameNotification
      object:nil
      queue:[NSOperationQueue mainQueue]
      usingBlock:^(NSNotification * notification)
     {
         CGRect keyboardEndFrame =
         [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
         CGRect screenRect = [[UIScreen mainScreen] bounds];
    
         if (CGRectIntersectsRect(keyboardEndFrame, screenRect))
         {
             // Keyboard is visible
         }
         else
         {
             // Keyboard is hidden
         }
    }];
    
    0 讨论(0)
  • 2020-12-13 11:40

    When the keyboard is docked, UIKeyboardWillShowNotification will be raised. If the keyboard is split or undocked, no keyboard notifications are raised.

    If a keyboard is docked, UIKeyboardWillShowNotification will be raised, and the following will be true:

    [[[notification userInfo] valueForKey:@"UIKeyboardFrameChangedByUserInteraction"] intValue] == 1
    

    If a keyboard is undocked, UIKeyboardWillHideNotification will be raised, and the above statement will also be true.

    Using this information has been adequate for me to code my user interface.

    Note: this might be a violation of Apple's guidelines, I'm not sure.

    0 讨论(0)
  • 2020-12-13 11:40

    The notifications that are posted when the keyboard appears or changes its position (UIKeyboardWillShowNotification, UIKeyboardWillChangeFrameNotification) contain a userInfo dictionary with the frame of the keyboard (UIKeyboardFrameEndUserInfoKey) that allows you to position your UI elements correctly, depending on the actual size and location of the keyboard.

    0 讨论(0)
  • 2020-12-13 11:48

    UIKeyboardFrameChangedByUserInteraction key does not return 1 all the time when keyboard splits.

    Below is the full user info dictionary key values on UIKeyboardDidShowNotification / UIKeyboardDidHideNotification.

    2012-07-11 11:52:44.701 Project[3856:707] keyboardDidShow: {
        UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}";
        UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 944}";
        UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 592}";
        UIKeyboardFrameBeginUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}";
        UIKeyboardFrameChangedByUserInteraction = 0;
        UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}";
    }
    
    2012-07-11 11:52:45.675 Project[3856:707] keyboardDidHide: {
        UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}";
        UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 592}";
        UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 944}";
        UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}";
        UIKeyboardFrameChangedByUserInteraction = 0;
        UIKeyboardFrameEndUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}";
    }
    

    Instead you can use UIKeyboardCenterBeginUserInfoKey or UIKeyboardCenterEndUserInfoKey keys to get notified when keyboard splits.

    Hope this helps!

    0 讨论(0)
提交回复
热议问题