UITextView, чтобы быть измененным с contentize после жеста повышения другого представления - PullRequest
12 голосов
/ 28 марта 2012

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

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

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

Будет полезна любая помощь.

Перед увеличением / уменьшением Before zooming in/out

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

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

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

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

NSLog(@"Bounds: %@", NSStringFromCGRect(textView.bounds));
1 голос
/ 30 марта 2013

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

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

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

0 голосов
/ 02 апреля 2013

Ответ Трея работает, но он вызывает слишком большую загрузку процессора. Попробуйте реализовать тот же метод, используя 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...