У меня есть UITextView
, на котором я использую NSLayoutConstraint
, чтобы уклониться от клавиатуры. Вот ограничение:Использование NSLayoutConstraint в UITextView сбрасывает contentSize в {0,0}
self.textViewBottomConstraint = [NSLayoutConstraint constraintWithItem:textView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
[self.view addConstraint:self.textViewBottomConstraint];
Когда клавиатура показывает/скрывает анимировать ограничение, установив ограничение постоянная на высоту клавиатуры. Однако, по какой-то причине сбрасывает contentSize до {0,0}, тем самым нарушая прокрутку. Я добавил хак к handleKeyboardDidHide:
, чтобы сбросить содержимое в соответствии с тем, что было до сброса, но у него есть некоторые уродливые побочные эффекты, такие как сбрасываемая позиция прокрутки, и вид не прокручивается до положения курсора, пока не начнется ввод текста.
- (void) handleKeyboardDidShow:(NSNotification *)notification
{
CGFloat height = [KeyboardObserver sharedInstance].keyboardFrame.size.height;
self.textView.constant = -height;
[self.view layoutIfNeeded];
}
- (void) handleKeyboardDidHide:(NSNotification *)notification
{
// for some reason, setting the bottom constraint resets the contentSize to {0,0}...
// so let's save it before and reset it after.
// HACK
CGSize size = self.textView.contentSize;
self.textView.constant = 0.0;
[self.view layoutIfNeeded];
self.textView.contentSize = size;
}
Кто-нибудь знает, как избежать этой проблемы вообще?
Это звучит, как может быть, у вас есть ограничение сверху на верхней части надтаблицы, а также , Если это так, вы хотите избавиться от него, но вместо этого указана явная высота для текстового представления. – rdelmar
@rdelmar Почему главный вопрос ограничивает или влияет на contentSize каким-либо образом? В любом случае удаление верхнего ограничения означало бы выброс автоопределения вообще для этого диспетчера представлений. – memmons
Потому что, если у вас есть верхнее ограничение, и вы перемещаете снизу вверх до места вершины, то единственный способ удовлетворить ограничения - это иметь 0 высоты. – rdelmar