iphone - uitableviewcell - uitableview swift 4 example
Posicionando la imagenVista de un UITableViewCell (6)
Debe subclasificar UITableViewCell y anular layoutSubviews, de la siguiente manera:
- (void) layoutSubviews
{
[super layoutSubviews];
self.imageView.frame = CGRectMake( 10, 10, 50, 50 ); // your positioning here
}
En su método cellForRowAtIndexPath: asegúrese de devolver una instancia de su nuevo tipo de celda.
En cada UITableViewCell de un UITableView, estoy colocando una imagen en su imageView. Sin embargo, si aumento la altura de una celda usando tableView: heightForRowAtIndexPath: para acomodar más texto, he encontrado que:
- La imagen está alineada en el centro verticalmente.
- El margen izquierdo de la imagen aumenta. Esto empuja el texto hacia la derecha, por lo que su margen izquierdo ya no está alineado con el texto en las celdas de arriba y abajo.
Me gustaría que la imagen esté alineada verticalmente en la parte superior, de modo que esté en la esquina superior izquierda de la celda (como la primera celda de la imagen de abajo) y no tenga su margen izquierdo aumentado (de modo que el margen izquierdo de el texto en la segunda celda se alinea con el texto en la primera celda).
Alterar el marco, el centro, etc. de imageView parece no tener efecto. ¿Algunas ideas? Gracias...
(Tengo una imagen del problema, pero SO no me deja publicar una imagen todavía porque soy un novato con menos de 10 de reputación. Grrr ...)
El momento en que piensa que necesita ajustar el tamaño o la posición de los elementos en los estilos predeterminados, es el momento en que debe pensar en crear una celda personalizada con sus propios elementos dimensionados y colocados de la forma en que desea que estén. Por eso puedes crear celdas personalizadas. :)
Otra forma (funciona en iOS 6) es crear un UIImageView y agregarlo a la celda como una subvista
UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,20,20)];
[yourImageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]]]; //You can have an Array with the name of
[yourcell.contentView addSubview:yourImageView]; //add the imageView as a subview
Puede crear una celda personalizada y colocar los objetos donde necesita que estén, así como configurar los valores de máscara automática.
Swift 4 variación de la solución de TomSwift (que funcionó muy bien para mí):
override public func layoutSubviews() {
super.layoutSubviews()
imageView?.frame = CGRect( x: 16, y: 9, width: imageView!.intrinsicContentSize.width, height: imageView!.intrinsicContentSize.height)
}
Una función realmente útil que podría no haber probado (en UITableViewDelegate
) es tableView:willDisplayCell:forRowAtIndexPath:
Se llama inmediatamente antes de que se muestre una celda y su propósito es permitirle hacer cosas en el diseño sin que el sistema operativo lo modifique nuevamente antes de mostrarlo. Efectivamente tienes control total. Lo he usado para cambiar las fuentes en las celdas, pero puede iterar las subvistas de la celda y modificar sus marcos también.
Aun así, estoy de acuerdo en que estás en el punto en el que es hora de ver las células personalizadas y dejar de luchar contra el sistema operativo. No es difícil de hacer y Apple ofrece un buen ejemplo en la Guía de programación de Table View para iOS .