Как заставить UITextView автоматически изменять размер внутри UITableViewCell
-
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
}