Как я могу остановить сброс нижнего края UITextView к 32? - PullRequest
2 голосов
/ 25 мая 2011

У меня есть полноэкранный UITextView, который уменьшается при появлении клавиатуры, чтобы клавиатура не покрывала текст. В рамках этого я также изменяю нижний текстовый вид textView, чтобы пространство под текстом было меньше при наличии клавиатуры и больше при отсутствии клавиатуры.

Проблема заключается в том, что всякий раз, когда пользователь нажимает текстовое представление около нижнего края, чтобы начать редактирование, нижний контентInset самопроизвольно сбрасывается до 32. Я знаю из этого ответа , что можно создать подкласс UITextView и переопределить метод contentInset, например:

@interface BCZeroEdgeTextView : UITextView
@end

@implementation BCZeroEdgeTextView

- (UIEdgeInsets) contentInset 
  { 
  return UIEdgeInsetsZero; 
  }

@end

Но это не останавливает саму перезагрузку нижней вставки - она ​​просто меняет фигуру, к которой она сбрасывается. Как я могу заставить свой UITextView просто сохранять значение contentInset, которое я установил?

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Чтобы сохранить значение, которое вы установили, вы можете пойти по пути подкласса, но вернуть значение вашего собственного свойства, а не константу, что-то вроде этого:

@interface BCCustomEdgeTextView : UITextView
@property (nonatomic, assign) UIEdgeInsets myContentInset;
@end

@implementation BCCustomEdgeTextView

@synthesize myContentInset;

- (UIEdgeInsets) contentInset { 
    return self.myContentInset; 
}

@end

Но учтите, что причинаUITextView сбрасывает свой нижний аргумент contentInset до 32 в том, что более стандартная вставка отключает всплывающие окна автозаполнения и тому подобное.

0 голосов
/ 03 марта 2012

Вот мое решение, но немного дольше:

- (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 вместо.

...