Как получить UITextView для автоматического изменения размера в UITableViewCell - PullRequest
1 голос
/ 22 октября 2009

Настройка: у меня UITextView внутри UITableViewCell 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 в ячейке и просто ничего не делал, но даже это не мешает представлению изменять размеры повсеместно.

Я уже давно над этим работаю, но все еще не нашел решения.

1 Ответ

2 голосов
/ 22 октября 2009

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...