изменить размер UIView при отображении клавиатуры для iphone, как?

Я покажу вам пример с хорошо известным WhatsApp. Когда вы касаетесь текста внутри текста, всплывает клавиатура, поэтому мне нужно переместить или сдвинуть всю эту полосу вверх и уменьшить размер представления до половины, чтобы я все еще мог видеть текст, который я ' m ввод и кнопка отправки

Этап 1: http://www.appbank.net/wp-content/uploads/2010/10/WhatsAppMessenger-18.jpg

Этап 2: http://www.onetooneglobal.com/wp-content/uploads/2011/02/onetoone_whatsapp_2.png

Как лучше всего этого добиться?


person PartySoft    schedule 23.03.2011    source источник


Ответы (2)




#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];
}

Попробуйте эти методы. Отредактируйте его в соответствии с вашими требованиями.

person Adarsh V C    schedule 23.03.2011
comment
хорошо, я использовал ваш код, и он РАБОТАЛ :) Мне пришлось поставить вместо void, IBAction и назначить события для textedit, я до сих пор не знаю роль keyboardWillHide и keyboardWillShow и как их использовать, .., для скрытия клавиатуры я использовал stackoverflow.com/questions/2586937/. спасибо за это чудесное решение - person PartySoft; 30.03.2011
comment
В некоторых сценариях тайминги анимации могут быть не идеальными, если мы используем textFieldDidBeginEditing и textFieldDidEndEditing, поэтому мы можем использовать keyboardWillShow и keyboardWillHide для соответствующей настройки этого времени. Эти два метода срабатывают немного раньше. В любом случае в вашем случае я думаю, что textFieldDidBeginEditing и textFieldDidEndEditing достаточно. :) - person Adarsh V C; 30.03.2011
comment
оставаться вверх = ДА; Что остается здесь? - person Minkle Garg; 01.09.2011
comment
Некоторые клавиатуры бывают разных размеров (например, для японского ввода). Чтобы сделать это правильно, вам нужно получить границы клавиатуры из значения UIKeyboardFrameEndUserInfoKey в словаре уведомлений. - person davehayden; 10.03.2012
comment
Большое Вам спасибо . отлично работает :) - person Erhan Demirci; 20.08.2013

Вы захотите послушать UIKeyboardDidShowNotification и UIKeyboardDidHideNotification, и в методе, который соответствует указанному вами селектору, центр уведомлений изменяет размер ваших представлений по желанию (обычно путем изменения свойства UIView.frame)

person Zaky German    schedule 23.03.2011
comment
Для записи, у Apple есть отличный учебник по этому поводу: developer.apple.com/library/ios/documentation/StringsTextFonts/ - person To1ne; 13.08.2013