Search code examples
iphoneuiviewkeyboardresizeshift

resize UIView when showing the keyboard for iphone, how to?


I will show you an example with the well known whatsapp When you touch inside the text the keyboard pops up , so I have to move or shift all that bar up and resize the view to half, so I can still see the text that I'm typing and the send button

Phase 1: http://www.appbank.net/wp-content/uploads/2010/10/WhatsAppMessenger-18.jpg

Phase 2: http://www.onetooneglobal.com/wp-content/uploads/2011/02/onetoone_whatsapp_2.png

What would be the best way to achieve this?


Solution

  • 
    
    #define kOFFSET_FOR_KEYBOARD 280.0
    
    - (void)keyboardWillHide:(NSNotification *)notif {
        [self setViewMoveUp:NO];
    }
    
    
    - (void)keyboardWillShow:(NSNotification *)notif{
        [self setViewMoveUp:YES];
    }
    
    
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        stayup = YES;
        [self setViewMoveUp:YES];
    }
    
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        stayup = NO;
        [self setViewMoveUp:NO];
    }
    
    //method to move the view up/down whenever the keyboard is shown/dismissed
    -(void)setViewMoveUp:(BOOL)moveUp
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3]; // if you want to slide up the view
        [UIView setAnimationBeginsFromCurrentState:YES];
    
        CGRect rect = self.view.frame;
        if (moveUp)
        {
            // 1. move the view's origin up so that the text field that will be hidden come above the keyboard 
            // 2. increase the size of the view so that the area behind the keyboard is covered up.
    
            if (rect.origin.y == 0 ) {
                rect.origin.y -= kOFFSET_FOR_KEYBOARD;
                //rect.size.height += kOFFSET_FOR_KEYBOARD;
            }
    
        }
        else
        {
            if (stayup == NO) {
                rect.origin.y += kOFFSET_FOR_KEYBOARD;
                //rect.size.height -= kOFFSET_FOR_KEYBOARD;
            }
        }
        self.view.frame = rect; 
        [UIView commitAnimations];
    }
    
    

    Try this methods. Edit it according to your requirement.