Как заставить UITextView автоматически изменять размер внутри UITableViewCell

StackOverflow https://stackoverflow.com/questions/1603705

  •  05-07-2019
  •  | 
  •  

Вопрос

Настройка:У меня есть UITextView внутри UITableViewCell's contentView.Я хочу, чтобы он занимал весь размер ячейки.Я создаю текстовое представление следующим образом:

UITextView *textView = [[[UITextView alloc] initWithFrame:CGRectMake(0,0,268,43)] autorelease];
textView.backgroundColor = [UIColor redColor];
textView.layer.cornerRadius = 10;
textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

И я переопределяю heightForRowAtIndexPath, чтобы вернуть 200 для этой строки.

Цвет фона выбран только для того, чтобы я мог сказать, где он находится.Кажется, что ячейка автоматически определяет ее правильный размер при первом просмотре.Однако мне нужно, чтобы он продолжал корректно изменять его размер при автоматическом запуске интерфейса, который, кажется, работает только иногда и только тогда, когда я не редактирую TextView.В других случаях это изменяет размер вида так, чтобы он имел очень маленькую высоту (выглядит как -1), или делает его слишком широким, или просто вообще не изменяет его размер.

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

Я уже некоторое время ломаю голову над этим, но до сих пор не нашел решения.

Это было полезно?

Решение

UITableViewCell имеет фиксированную высоту, высоту, предоставляемую делегатом UITableView.Когда вы поворачиваете свое устройство, высота строки никогда не изменится, если только вы не вызовете -reloadData в вашем TableView.Я бы избавился от автоматического изменения размера и справился с этим самостоятельно.

Когда вы вводите текстовое поле, вы можете легко установить рамку в CGRectZero.Затем реализуйте -layoutSubviews (и вызовите super в этом методе, до того, как настройка рамок ваших подвидов) и установите рамку UITextField в соответствии с contentRect свойство ячейки.

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
    if(self = [super ...]){ // or -initWithStyle:reuseIdentifier: whatever you want
        _textView = [[UITextView alloc] initWithFrame:CGRectZero]; // Instance variable
        // Probably not needed to set autoresizing mask
    }

    return self;
}
- (void)layoutSubviews {
    [super layoutSubviews];
    _textView.frame = CGRectMake(0.0f, 0.0f, self.contentRect.size.width, self.contentRect.size.height); // Adjust as needed
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top