Подтвердить что ты не робот

UITextView будет изменен с учетом содержимого после жесткого нажатия другого вида

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

Я успешно могу изменить размер UITextView в соответствии с требованиями. Но у меня проблема с текстом, отображаемым в textview. После масштабирования и масштабирования несколько раз. содержимое внутри UITextView не подходит (см. ниже изображение "После масштабирования/выключения" ). Он уменьшает ширину содержимого. Я проверил размер содержимого UITextView, но он имеет такую ​​же ширину перед изменением размера и после изменения размера.

Здесь я установил выравнивание текста в центр для UITextView. Я также применил contentInset к UIEdgeInsetZero.

Любая помощь будет оценена.

Перед масштабированием/выводом Before zooming in/out

После увеличения/уменьшения  After zooming in/out

4b9b3361

Ответ 1

Вы вызываете setNeedsLayout в родительском представлении после того, как вы изменили фрейм?

Попробуйте выполнить регистрацию границ текстового вида следующим образом:

NSLog(@"Bounds: %@", NSStringFromCGRect(textView.bounds));

Ответ 2

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

- (void)layoutSubviews {
    CGRect bounds = self.bounds;
    self.bounds = CGRectZero;
    self.bounds = bounds;
}

в подклассе UITextView эта проблема будет решена. Это определенно не самая элегантная вещь, которую я когда-либо видел, но это единственное решение, которое я придумал.

Ответ 3

Ответ на Трей работает, но это вызывает слишком много использования ЦП. Попробуйте реализовать тот же метод, используя KVO.

[self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];

а затем

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

    if([keyPath isEqualToString:@"bounds"]) {

        [self removeObserver:self forKeyPath:@"bounds"];

        CGRect bounds = self.bounds;
        self.bounds = CGRectZero;
        self.bounds = bounds;

        [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];
    }
}