2016-12-29 2 views
-2

Я использую следующий код для перемещения экрана вверх или вниз, когда textView показывает или скрывает клавиатуру, таким образом, я могу видеть последнее поле, когда оно сфокусировано.Nav Bar невидимый, когда отображается клавиатура

- (void)textViewDidBeginEditing:(UITextView *)textField 
{ 
    [self animateTextView: textField up: YES]; 
} 


- (void)textViewDidEndEditing:(UITextView *)textField 
{ 
    [self animateTextView: textField up: NO]; 
} 

- (void) animateTextView: (UITextView*) textField up: (BOOL) up 
{ 
    const int movementDistance = 130; // tweak as needed 
    const float movementDuration = 0.2f; // tweak as needed 

    int movement = (up ? -movementDistance : movementDistance); 

    [UIView beginAnimations: @"anim" context: nil]; 
    [UIView setAnimationBeginsFromCurrentState: YES]; 
    [UIView setAnimationDuration: movementDuration]; 
    self.view.frame = CGRectOffset(self.view.frame, 0, movement); 
    [UIView commitAnimations]; 
} 

Но проблема в том, что navBar она также перемещается, когда экран движется вверх, есть способ, чтобы переместить все, кроме navBar или держать navBar в это положение после использования [self animateTextView: textField up: YES];?

+0

Почему? Почему бы вам спроектировать свое мнение так? Почему бы не использовать 'UINavigationController'? Почему вы используете 'beginAnimations:' API? Что это, iOS/iphoneos 3? –

ответ

1

Это потому, что у вас есть свой пользовательский NavigationBar в главном представлении. Сделайте еще один UIView ниже NavBar в своем раскадровке, а затем поместите свой textField и другие объекты пользовательского интерфейса в этот новый вид. Помните, что это значит, что navBar не должен находиться на одном и том же объекте UIView, который вы выдвигаете вверх, когда появляется клавиатура. Итак, сделайте выход этого нового объекта UIView и вместо этого переместите основной вид viewController только в режим вновь созданного вида.

[UIView animateWithDuration:0.2 animations:^{ 
    //Just Replace Your Animation Code with This and see the difference. 
    self.containerViewOfOtherObjects.frame = CGRectOffset(self.containerViewOfOtherObjects.frame, 0, movement); 
}]; 
+0

Спасибо, Сайд, я добавил, мне нужно просто заменить строку 'self.view.frame = CGRectOffset (self.view.frame, 0, движение);' отправлено в ответ? Или также удалите '[UIView beginAnimations: @" anim "context: nil];' ... – CGR

+0

Нет, просто эта строка. 'self.view.frame = CGRectOffset (self.view.frame, 0, movement);' –

+0

Я пробовал, но это все равно, что двигать вверх и двигаться очень быстро, новый добавленный вид на его исходное место. – CGR