У меня очень простой контроллер представления в расширении iMessage. (Развернутый вид конечно). Я знаю, что у вас не может быть ввода с клавиатуры в компактном представлении ...
UITextView ограничен элементом над ним и под ним. Он имеет заданную высоту и ширину. Все ограничения в порядке и не нарушены.
Все параметры текстового представления в построителе интерфейса оставлены как ПО УМОЛЧАНИЮ.
Следующие проблемы возникают с UITextView:
Когда я начинаю редактировать, курсор еле виден. (на дне поля на полпути обрезано по вертикали).
При вводе первой буквы курсор перемещается в центр по вертикали текстового поля.
Ввод новой строки, а затем символа снова возвращает курсор вниз.
Затем ввод последующих символов после этого снова переместит курсор в центр по вертикали. И каждый второй персонаж снова прокручивает весь текстовый вид вниз. Таким образом, вы получаете это странное поведение отскока вверх и вниз с каждым нажатием клавиши.
Визуальная подсказка полосы прокрутки справа не отражает правильную высоту текстового представления при прокрутке. (Полоса прокрутки опускается вниз только наполовину - от высоты текстового представления.)
Я ожидаю, что UITextView по умолчанию будет работать так:
Курсор должен идти в начало текстового представления при активации и редактировании.
Text View не должен прыгать при вводе клавиш после новой строки.
Индикатор вертикальной полосы прокрутки должен отображать весь диапазон текстового поля, а не его половину.
Итак, очевидно, что внутреннее представление прокрутки внутри текстового представления имеет проблему с определением размеров предметов.
Кто-нибудь знает, является ли это конкретной проблемой iMessage или была ли у кого-нибудь эта проблема за пределами iMessage и как ее исправить?
Мои ограничения IB (второй вид внизу - текстовый):
Видео-демонстрация проблемы: https://youtu.be/1bkvHnkXLWM
ОБНОВЛЕНИЕ: я использую дочерние контроллеры представления, чтобы встроить свой контроллер представления в корневой контроллер. Я пробовал пустое приложение Hello World, и UITextView по умолчанию работает нормально. Таким образом, проблема связана с тем, как я встраиваю дочерний контроллер представления.
Это код, который я использую для встраивания своего дочернего контроллера представления:
- (void)showViewController:(UIViewController*)vcToShow isPop:(BOOL)isPop
{
NSLog(@"Presenting Controller: %@", vcToShow);
[self.activeVC willMoveToParentViewController:nil];
[self addChildViewController:vcToShow];
vcToShow.view.translatesAutoresizingMaskIntoConstraints = NO;
vcToShow.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.rootView addControls:@[vcToShow.view]
align:VerticalAlignStretchToFullHeight];
UIViewController* currentVC = self.activeVC;
self.activeVC = vcToShow;
vcToShow.view.alpha = 0.0f;
[self transitionFromViewController:currentVC
toViewController:vcToShow
duration:0.3
options:UIViewAnimationOptionTransitionNone
animations:^{
vcToShow.view.alpha = 1.0f;
}
completion:^(BOOL finished) {
[currentVC removeFromParentViewController];
[vcToShow didMoveToParentViewController:self];
[self updateScreenState];
if (isPop) {
[self removeReferenceToController:currentVC];
}
}];
}
? you are using autoresizing mask later, is that not supposed to be set to
YES`? - person Milan Nosáľ   schedule 14.09.2017