2015-06-20 4 views
1

My UIView не двигается вверх, когда клавиатура отображается и исчезает, когда клавиатура также скрыта.UIView не продвигается, когда отображается клавиатура AutoLayout

Это кодирование в ViewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; 

и это кодирование для остальных.

- (void)keyboardDidShow:(NSNotification *)note 
{ 
    [self animateTextField:TRUE]; 
} 

- (void)keyboardDidHide:(NSNotification *)note 
{ 
    [self animateTextField:FALSE]; 
} 

-(void)animateTextField :(BOOL)up 
{ 
    const int movementDistance = -130; // tweak as needed 
    const float movementDuration = 1.0; // tweak as needed 

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

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

Вы, используя автоматическую компоновку? вы не можете напрямую изменить рамку или центр, если автоматический макет включен – 0yeoj

+0

@ 0yeoj yap, я использую autolayout, таким образом, любое решение тогда, PLS? – ppshein

+0

@ 0yeoj может у пост полный ответ? – ppshein

ответ

0

С автоматической компоновкой вы изменяете константу ограничения, хотя вы не меняете рамки CGRect. Это был старый способ.

Пожалуйста, смотрите эту ссылку, что я ответил на подобный вопрос, что у них были проблемы, оживляющий перемещение UIView

Animate UIView with layoutConstraints

Это должно помочь, но не стесняйтесь, дайте мне знать, если вам нужно что-нибудь уточнить ,

+0

Может ли вы отправить полный ответ, чтобы уточнить? – ppshein

+0

@ppshein, конечно, хотя если бы вы могли сказать мне сначала, у вас есть ограничения, добавленные в UIView? Сначала вам нужно сделать это, затем CTRL перетащите одно из ограничений относительно расстояния до точки вверху или внизу экрана. –

+0

Теперь он работает и получил новый урок из вашего ответа. Ценить это. – ppshein

1

Я думаю, что это подходит для вашей реализации:

-(void)animateTextField :(BOOL)up 
{ 
    const int movementDistance = -130; // tweak as needed 
    const float movementDuration = 1.0; // tweak as needed 

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

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

    [_buttonsView setNeedsLayout]; 
} 

Редактировать

Я попробовал ваш код и вызов setNeedsLayout сделали работу ..

0

использование только ниже коды, вам не нужно называть его из любого места

#pragma mark - move view up when keyboard is displayed 


- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [self animateTextField: textField up: YES]; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [self animateTextField: textField up: NO]; 
} 

- (void) animateTextField: (UITextField*) textField up: (BOOL) up 
{ 
    const int movementDistance = 80; // tweak as needed 
    const float movementDuration = 0.3f; // tweak as needed 

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

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

такой же рабочий процесс как мой кодировка. не работает вообще. – ppshein

+0

может у просто попробовать первый –

+0

скопировать и вставить свой код и проверить его –

Смежные вопросы