Pregunta

Configuración: Tengo un UITextView dentro de un UITableViewCell del contentView . Quiero que ocupe el tamaño completo de la celda. Creo la vista de texto de esta manera:

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

Y anulo heightForRowAtIndexPath para devolver 200 para esa fila.

El color de fondo es solo para que pueda decir dónde está. La celda parece dimensionarla automáticamente correctamente en la primera vista. Sin embargo, lo necesito para seguir redimensionándolo correctamente mientras se ejecuta automáticamente la interfaz, lo que parece funcionar solo algunas veces, y solo cuando no estoy editando textView. Otras veces, cambia el tamaño de la vista para que tenga una altura muy pequeña (se ve como -1), o la amplía demasiado o simplemente no la cambia de tamaño.

He intentado sobrescribir layoutSubviews en la celda y simplemente no hacer nada, pero incluso eso no impide que la vista cambie de tamaño en todo el lugar.

He estado hackeando esto por un tiempo, pero todavía no he encontrado ninguna solución.

¿Fue útil?

Solución

Un UITableViewCell tiene una altura fija, la altura proporcionada por el delegado de UITableView. Cuando gire su dispositivo, la altura de la fila nunca cambiará, a menos que llame a -reloadData en su tableView. Me desharé de los autoresizing y los administraré usted mismo.

Cuando inicia su textField, puede configurar fácilmente el marco en CGRectZero . Luego implemente -layoutSubviews (y llame a super en ese método, antes configurando los marcos de sus subvistas) y configure el marco de UITextField de acuerdo con el contenido contentRect propiedad de la 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top