2014-09-25 3 views
0

Этот код прекрасно работал в ios 7. Однако с ios8 и xcode 6.0.1 он перестает работать. Когда пользователь нажимал текстовое поле для ввода текста, поле было анимировано, чтобы плавать чуть выше верхней части клавиатуры, чтобы они могли видеть, что они печатают. Любые мысли о том, почему это не работает сейчас. Я вижу, что он начинает оживляться в течение секунды секунды, но затем текстовое поле исчезает. Разочарование.TextField анимация сломана ios8

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDuration:0.4]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
textField.frame = CGRectMake(textField.frame.origin.x, (textField.frame.origin.y - 200.0),    
textField.frame.size.width, textField.frame.size.height); 

_searchBtn.frame = CGRectMake(_searchBtn.frame.origin.x, (_searchBtn.frame.origin.y - 200.0), 
_searchBtn.frame.size.width, _searchBtn.frame.size.height); 
[UIView commitAnimations]; 


textField.alpha = .75; 


} 
+1

Кажется, что у вас такая же проблема, как у следующего парня http://stackoverflow.com/questions/26045048/how-to-implement-newsfeed-comment-page-similar-to-facebook-or-instagram. Возможно, на его вопрос есть ответы на ваши вопросы. Если в его вопрос входит ваш, вы должны перенести его, чтобы привлечь к нему больше внимания. Но я думаю, что его вопрос поможет вам немного. Например, ваш 200 жестко запрограммирован. Но вместо этого вы должны следить за уведомлением клавиатуры, чтобы вы могли извлечь высоту. Для теста попробуйте изменить число до 250 и посмотреть, что произойдет. –

+0

Спасибо, что ответ, Консоль. Я пробовал адаптировать код к фактической высоте клавиатуры динамически, но все равно не повезло. Я также попытался сыграть с этими цифрами. Большое вам спасибо за ваши предложения. У кого-то должен быть ответ на это! – hansoac

ответ

1

Проблема заключается в том, что ваш код регулирует положение вашего TextField путем фиксированного значения 200,0

Это было, вероятно, отлично подходит для iOS7, но все изменилось в iOS8 по двум причинам:

  • The системная клавиатура имеет дополнительный вид для показа предсказанных слов при вводе
  • Пользовательские клавиатуры могут быть такими же высокими, как разработчик выбирает

Вы должны изменить свой подход шаг меняет местоположение вашего TextField, когда клавиатура отображается или скрыта с помощью следующих два уведомлений:

  • UIKeyboardWillShowNotification
  • UIKeyboardWillHideNotification

В следующей статье я расскажу о проблемах, которые могут возникнуть, и о том, как правильно перемещать ваши взгляды при открытии клавиатуры :

can't get correct value of keyboard height in iOS8

EDIT 1: Предполагая, что текстовое поле имеет выпускное отверстие под названием "yourTextBox", код, чтобы изменить положение вашего текстового поля может выглядеть примерно так:

CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height; 
CGFloat keyboardHeight = <<calculated keyboard height as previously discussed>>; 
CGFloat textBoxHeight = _yourTextBox.frame.size.height; 

// Change the current frame of your textbox in order to reposition it 
CGFrame textBoxFrame = _yourTextBox.frame; 
textBoxFrame.origin.y = screenHeight - keyboardHeight - textBoxHeight; 
_yourTextBox.frame = textBoxFrame; 

Примечание: Если вы используете ограничения AutoLayout для позиционирования ваших подзонов, вам нужно будет избежать изменения фрейма и вместо этого изменить свои ограничения. Сообщение, если у вас возникают проблемы в этой области, потому что это может стать сложным.

+0

Это большое спасибо! Я прочитал ваш пост и выполняю ваши предложения. Однако как бы выглядел мой код, чтобы переместить текстовое поле чуть выше текущей высоты клавиатуры? Это все еще GCRectMake? – hansoac

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