Как я могу остановить сброс нижнего края UITextView к 32?
У меня есть полноэкранный UITextView, который уменьшается при появлении клавиатуры, чтобы клавиатура не покрывала текст. Как часть этого, я также изменяю нижний contentInset textView, так что пространство под текстом меньше, когда клавиатура присутствует, и больше, когда нет клавиатуры.
Проблема заключается в том, что всякий раз, когда пользователь нажимает текстовое представление около нижней части, чтобы начать редактирование, нижний контент Inset самопроизвольно сбрасывается до 32. Я знаю из этого ответа, что возможно создать подкласс UITextView и переопределить contentInset
метод, как это:
@interface BCZeroEdgeTextView : UITextView
@end
@implementation BCZeroEdgeTextView
- (UIEdgeInsets) contentInset
{
return UIEdgeInsetsZero;
}
@end
Но это не останавливает саму перезагрузку нижней вставки - она просто меняет фигуру, к которой она сбрасывается. Как я могу заставить свой UITextView просто сохранять значение contentInset, которое я установил?
2 ответа
Чтобы оно сохраняло заданное вами значение, вы можете пойти по пути подкласса, но вернуть значение вашего собственного свойства, а не константу, что-то вроде этого:
@interface BCCustomEdgeTextView : UITextView
@property (nonatomic, assign) UIEdgeInsets myContentInset;
@end
@implementation BCCustomEdgeTextView
@synthesize myContentInset;
- (UIEdgeInsets) contentInset {
return self.myContentInset;
}
@end
Но учтите, что причина, по которой UITextView сбрасывает свой нижний contentInset на 32, заключается в том, что более стандартная вставка будет отключать всплывающие окна автозаполнения и тому подобное.
Вот мое решение, но немного дольше:
- (void)setCustomInsets:(UIEdgeInsets)theInset
{
customInsets = theInset;
self.contentInset = [super contentInset];
self.scrollIndicatorInsets = [super scrollIndicatorInsets];
}
- (void)setContentInset:(UIEdgeInsets)theInset
{
[super setContentInset:UIEdgeInsetsMake(
theInset.top + self.customInsets.top,
theInset.left + self.customInsets.left,
theInset.bottom + self.customInsets.bottom,
theInset.right + self.customInsets.right)];
}
- (void)setScrollIndicatorInsets:(UIEdgeInsets)theInset
{
[super setScrollIndicatorInsets:UIEdgeInsetsMake(
theInset.top + self.customInsets.top,
theInset.left + self.customInsets.left,
theInset.bottom + self.customInsets.bottom,
theInset.right + self.customInsets.right)];
}
Подкласс UITextView
и добавить недвижимость customInsets
всякий раз, когда вам нужно установить contentInset
а также scrollIndicatorInsets
, задавать customInsets
вместо.