Me he frustrado con esta pregunta durante un par de días. Estoy tratando de agregar un UILabel a una UITableViewCell. Quiero que UILabel abarque todo el ancho de la celda, menos 5 o 10 en los lados derecho e izquierdo para ver el aspecto. Mi problema está en determinar programáticamente el tamaño del marco de la celda en el que colocar la etiqueta. No importa qué UITableViewStyle utilizo, el valor de cell.contentVew.frame.size.width no está cerca del ancho del propio cuadro de celda.Recuperar un marco UITableViewCell
Por ejemplo, en la tabla estoy construyendo, puedo lograr el resultado deseado subclasificando UITableViewCell y creando un UILabel con una anchura determinada manualmente (a través de simplemente prueba y error) por:
CGRectMake(10, 12, 397, self.contentView.frame.size.height);
Pero es ese número 397 que me está molestando. Quiero una forma de determinar programáticamente lo que debería ser para cualquier tabla de ancho o estilo. Esto debería ser un proceso simple simplemente determinando el ancho de todo el fotograma de la celda y luego restando 10 o 20 para que los bordes de UILabel no toquen realmente el borde de la celda.
Sin embargo, si fijo el tableViewStyle a UITableViewStyleDefault y luego tratar:
NSLog(@"Width: %f", self.contentView.frame.size.width);
consigo 320. Si fijo el estilo a cualquiera de los otros tres estilos, el número devuelto es 302. Hasta el 320 número no está ni cerca del ancho del marco de celda (como con mi número de 397 manualmente determinado).
¿A qué valor necesito acceder que devolverá todo el ancho del marco de dibujo de la celda? Estoy seguro de que, como con la mayoría de los problemas, la solución me dará ganas de darme una bofetada en la frente, pero estoy al punto de estar preparado para eso ahora.
EDITAR para más información:
Una aclaración a cualquier persona interesada. Esta pregunta mía se refiere principalmente a una tabla de estilos agrupados. Para un estilo llano, la respuesta a mi pregunta anterior se puede determinar simplemente en el método cellForRowAtIndexPath por:
CGFloat cellWidth = [tableView rectForRowAtIndexPath:indexPath].size.width;
El problema que estoy teniendo es que el método rectForRowAtIndexPath devuelve el ancho del marco en el que la célula es dibujado, lo cual está bien para una tabla de estilo simple ya que el ancho de la celda es todo el ancho del marco. Sin embargo, en una tabla agrupada, el ancho de la celda es menor que el ancho del marco en el que se dibuja, por lo que este método devolverá un número que es bastante más ancho que el ancho de la celda. Es posible que el ancho de la celda en un estilo de tabla agrupada sea un número fijo menor que el ancho del marco de la tabla, por lo que esta podría ser la forma de resolver el problema. Investigaré eso y responderé mi propia pregunta aquí si ese es el caso.
La gran pregunta me da exactamente el mismo comportamiento y me vuelve loco. Mi solución fue no pensar en el tamaño del marco y solo referirme al ancho de las subvistas en porcentajes del tamaño de la vista del contenido.Estoy bastante seguro de que el marco de vista de contenido excluye las áreas a la izquierda y derecha de la celda reservada para los accesorios (mover, eliminar, divulgar, etc.) pero aún no responde el problema de por qué los marcos de celda siempre informan el tamaño incorrecto . Con suerte, alguien vendrá y le dará sentido a todo esto. – Rog
¿Es esto en el paisaje? –
@Bartosz - En mi ejemplo, obtengo números del retrato. – Chris