Como obter um UITextView para dimensionamento automático dentro de um UITableViewCell
-
05-07-2019 - |
Pergunta
Configuração: Eu tenho um UITextView
dentro UITableViewCell
um contentView
. Eu quero que ele ocupe o tamanho total da célula. Eu criar a exibição de texto assim:
UITextView *textView = [[[UITextView alloc] initWithFrame:CGRectMake(0,0,268,43)] autorelease];
textView.backgroundColor = [UIColor redColor];
textView.layer.cornerRadius = 10;
textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
E eu substituir heightForRowAtIndexPath para retornar 200 para essa linha.
A cor de fundo é apenas para que eu possa dizer onde ela está. A célula parece estar dimensionamento automaticamente corretamente à primeira vista. No entanto, eu preciso dele para continuar a redimensioná-la corretamente ao auto-rotação da interface, que só parece funcionar às vezes, e só quando eu não estou editando o textView. Outras vezes, ele redimensiona a fim de ter uma altura muito pequena (parece -1), ou faz com que seja muito grande, ou simplesmente nem sequer redimensioná-la de todo.
Eu tentei substituir layoutSubviews na célula e simplesmente não fazer nada, mas mesmo isso não impede a vista do redimensionamento em todo o lugar.
Eu estive a mexer com isso por algum tempo agora, mas ainda não encontraram nenhuma solução.
Solução
A UITableViewCell tem uma altura fixa, a altura fornecidos pelo delegado do UITableView. Quando você gira o dispositivo, a altura da linha nunca vai mudar, a menos que você chamar -reloadData
em seu tableView. Eu livrar-se do redimensionamento automático e geri-lo você mesmo.
Quando o init seu textField, você pode facilmente definir o quadro para CGRectZero
. Em seguida, implementar -layoutSubviews
(e chamada de super nesse método, antes definir os quadros de seus subviews) e definir o quadro do UITextField acordo com a propriedade contentRect
da célula.
- (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
}