2014-10-01 4 views
0

У меня есть вид, встроенный в прокрутку. Я написал код таким образом, что когда курсор помещается в текстовое поле (внутри представления), которое скрывается клавиатурой, экран будет перенастроен так, что текстовое поле больше не будет скрыто. Я использую autolayout для этого.Использование Autolayout с UIView, встроенным в UIScrollView

Моя проблема заключается в том, что когда я помещаю View в контроллер просмотра в положение, которое я хочу, перед запуском симулятора появляется много лишнего пробела. Но когда клавиатура появляется (и экран перерисовывается), я могу прокручивать вверх, а контроллер просмотра больше не имеет этого дополнительного пробела.

Если я отрегулирую представление так, чтобы не было никакого пробела (так оно появляется на раскадровке), тогда, когда появляется клавиатура, я не могу прокрутить вверху окна.

Я предполагаю, что это имеет какое-то отношение к тому, как представление сосредоточено в пределах прокрутки, но я пробовал множество настроек ограничений в инспекторе размеров и не могу решить эту проблему. Я бы очень хотел, чтобы исправить это в раскадровке (по сравнению с помощью кода), если это вообще возможно ...

Вот код:

- (void) keyboardDidShow:(NSNotification *)notification 
{ 
    NSDictionary* info = [notification userInfo]; 
    CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; 
    kbRect = [self.view convertRect:kbRect fromView:nil]; 

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbRect.size.height, 0.0); 
    self.scrollView.contentInset = contentInsets; 
    self.scrollView.scrollIndicatorInsets = contentInsets; 

    CGRect aRect = self.view.frame; 
    aRect.size.height -= kbRect.size.height; 
    if (!CGRectContainsPoint(aRect, self.activeField.frame.origin)) { 
     [self.scrollView scrollRectToVisible:self.activeField.frame animated:YES]; 
    } 
} 

- (void) keyboardWillBeHidden:(NSNotification *)notification 
{ 
    UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
    self.scrollView.contentInset = contentInsets; 
    self.scrollView.scrollIndicatorInsets = contentInsets; 
} 
+0

Добавить скриншоты –

+0

У меня нет разрешения на публикацию скриншотов, но это вид сверху Вид прокрутки сверху контроллера просмотра. Ниже приведены ограничения в представлении «Высота: 358», «Задание пробела»: «Наблюдение», «Ведущее пространство»: «Наблюдение», «Выровнять центр X»: «Наблюдение», «Нижнее пространство»: «Наблюдение»: 100, «Верхнее пространство»: «Наблюдение» равно 15 – gumbynr

ответ

0

Оказывается, что я устанавливал значение EdgeInsets слишком высоко. .. когда я изменился с

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbRect.size.height, 0.0);

в

UIEdgeInsets contentInsets = UIEdgeInsetsMake(60.0, 0.0, kbRect.size.height, 0.0);

Позиционирование было улучшено.

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