2014-10-08 5 views
2

У меня есть UIView с UITextField, расположенным в нижней части экрана, который будет двигаться вверх, когда появится клавиатура.iOS 8 перемещает UIView вверх при появлении клавиатуры | Проблема

Я использовал метод ниже до iOS 8 и, кажется, работает отлично.

// When Keyboard appears 
- (void)keyboardWillShow:(NSNotification *)notification { 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; 
[UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey]integerValue]]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 

// Frame Update 
CGRect frame = self.bottomView.frame; 
frame.origin.y = self.view.frame.size.height - 266.0f; 
self.bottomView.frame = frame; 

[UIView commitAnimations]; 
} 

// When keyboard disappears 
- (void) keyboardHides : (NSNotification *) notification { 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; 
[UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 

// Frame update 
CGRect frame = self.bottomView.frame; 
frame.origin.y = self.view.frame.size.height - self.bottomView.frame.size.height; 
self.bottomView.frame = frame; 

[UIView commitAnimations]; 
} 

Но приведенный выше код не похоже на работу в iOS 8 как блоки КЛАВИАТУРА UIView за ним.

После небольшого исследования я узнал ответ almost-similar. Но здесь целых UIView подталкивали вверх, и я бы хотел достичь только для того, чтобы переместить bottom UIView.

+0

Почему бы вам просто не поместить все в 'UIScrollView' и просто прокрутить его вниз, когда появится клавиатура? –

+0

Я бы рекомендовал вам решить проблему анимации и использовать 'inputAccessoryView' на' UITextField'. Из того, что я могу сказать, это то, что вы пытаетесь сделать в любом случае. – Oxcug

+0

@ Рома-МТ не хочу этого делать :) – Sreejith

ответ

2

Get TPKeyboardAvoidingScrollView из https://github.com/michaeltyson/TPKeyboardAvoiding

использовать следующим образом.

уронить исходные файлы TPKeyboardAvoidingScrollView.m и TPKeyboardAvoidingScrollView.h в свой проект, поп UIScrollView в XIb вашего взгляда контроллера, установить класс мнения, скроллинга к TPKeyboardAvoidingScrollView, и поместить все элементы управления в этой точке зрения прокрутки. Вы также можете создавать его программно, без использования xib - просто используйте TPKeyboardAvoidingScrollView в качестве своего верхнего уровня.

Чтобы отключить автоматическую функциональность кнопки «Далее», измените тип возвращаемого ключа UITextField на любой, кроме UIReturnKeyDefault.

+0

Этот пакет классов изумительный! Он так хорошо работает. Благодаря! – Krekin

+0

Действительно. Работает безупречно !!!! – iAnurag

1

Я не уверен, если это ваша проблема, но вы должны использовать блок API-интерфейсы, основанные на анимации UIView

Пример (не тестировалось)

- (void)animateTextField:(UITextField*)textField 
         up:(BOOL)up 
{ 
    const float movementDuration = 0.5f; 
    const int movementDistance = 380; 
    int movement = (up ? -movementDistance : movementDistance); 
    [UIView animateWithDuration:movementDuration 
        animations: 
        ^{ 
         CGRect frame = self.bottomView.frame; 
         frame.origin.y = self.view.frame.size.height - 266.0f; 
         self.bottomView.frame = frame; 

        } 
    ]; 
} 

Вы можете прочитать в док Apple:

Использование этого метода не рекомендуется в iOS 4.0 и более поздних версиях. Вы должны использовать основанные на блоках методы анимации, чтобы указать ваши анимации.

https://developer.apple.com/Library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html

Надеется, что это помогает!

+0

Изменен для блока анимации. UIView обновляется.Но это не отражается в пользовательском интерфейсе. добавлено [view layoutIfNeeded]. Тем не менее это не работает. – Sreejith

0

Я использовал этот код. Он не перемещался в режиме прокрутки. но изменили свои позиции XY. , но это эффективно в моем iPhone 6. Я не проверял их с другими iPhone'ами.

func textViewDidBeginEditing(textView: UITextView){ 
    textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y - 216 , textView.frame.size.width, textView.frame.size.height) 
    buttonProp.frame = CGRectMake(buttonProp.frame.origin.x, buttonProp.frame.origin.y - 216, buttonProp.frame.size.width, buttonProp.frame.size.height) 
    MessageView.frame = CGRectMake(MessageView.frame.origin.x, MessageView.frame.origin.y - 216, MessageView.frame.size.width, MessageView.frame.size.height) 
    datePicked.frame = CGRectMake(datePicked.frame.origin.x, datePicked.frame.origin.y - 216, datePicked.frame.size.width, datePicked.frame.size.height) 

} 

func textViewDidEndEditing(textView: UITextView){ 
    textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y + 216, textView.frame.size.width, textView.frame.size.height) 
    buttonProp.frame = CGRectMake(buttonProp.frame.origin.x, buttonProp.frame.origin.y + 216, buttonProp.frame.size.width, buttonProp.frame.size.height) 
    MessageView.frame = CGRectMake(MessageView.frame.origin.x, MessageView.frame.origin.y + 216, MessageView.frame.size.width, MessageView.frame.size.height) 
    datePicked.frame = CGRectMake(datePicked.frame.origin.x, datePicked.frame.origin.y + 216, datePicked.frame.size.width, datePicked.frame.size.height) 
} 

Все мои компоненты запрограммированы для перемещения, когда начинается редактирование. и вернуться после редактирования. ручное редактирование. да.