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.

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top