2014-09-11 3 views
5

У меня есть представление, которое я хочу переместить его положение, когда отображается клавиатура, я использую UIKeyboardWillShowNotification делегат, чтобы обновить позицию и отлично работать на устройстве IOS 7, но когда я пытаюсь запустите его в устройстве IOS 8, тогда просмотр не будет изменен, кадр обновлен, так как я вижу его в журнале.IOS 8 set view frame not working

Ниже мой код

-(void) keyboardWillShow:(NSNotification*) notification{ 

    @autoreleasepool { 
     CGRect frame = _loginFrame.frame; 
     frame.origin.y-=200; 

     DLog(@"login frame %@ ",NSStringFromCGRect(frame)); 
     [UIView animateWithDuration:0.25 animations:^{ 
      [_loginFrame setFrame:frame]; 
     }]; 
    } 

}

Но, когда я пытаюсь анимации в dispatch_after блокировать его анимировать в новое положение

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [UIView animateWithDuration:0.25 animations:^{ 
     [_loginFrame setFrame:frame]; 
    }]; 
}); 

любую идею, почему кадр не оживление на новую позицию без отправки_отправки?

Спасибо!

Примечание: это выглядит как setFrame: метод не работает, не знаю почему, я создал основную Ios 8 приложение, чтобы проверить это

2014-09-11 18: 59: 54,836 KeyboardCheck [31215: 1451974] клавиатура показать 2014-09-11 18: 59: 54.837 KeyboardCheck [31215: 1451974] старый кадр {{60, 269}, {200, 30}} 2014-09-11 18: 59: 54.837 Проверка клавиатуры [31215: 1451974] рамка для обновления {{60, 169}, {200, 30}} 2014-09-11 18: 59: 55.33 9 KeyboardCheck [31215: 1451974] завершение блок-рамка {{60, 269}, {200, 30}} 2014-09-11 18: 59: 55.822 KeyboardCheck [31215: 1451974] клавиатура скрыть 2014-09-11 18: 59: 55,822 KeyboardCheck [31215: 1451974] старый кадр {{60, 269}, {200, 30}} 2014-09-11 18: 59: 56,324 KeyboardCheck [31215: 1451974] завершение блока frame {{60, 269}, {200, 30}}

+1

Вы используете автоматическую раскладку? – Fogmeister

+1

Если 'dispatch_after' работает, большинство из вас вызвано использованием автоматического макета. Правильный способ сделать это - это обновление ваших ограничений вместо установки фрейма. –

+0

Да Я использую автозапуск, но у меня не было этой проблемы в IOS 7, ограничение установлено для левого, правого, нижнего интервала –

ответ