2011-01-19 6 views
5

Básicamente estoy tratando de encontrar la forma correcta de diseñar una UITableViewCell que tenga dos UITextViews y tres UILabels dentro de ella. Los dos UITextViews tienen contenido dinámico y su tamaño no se puede determinar hasta el tiempo de ejecución.Cómo configurar iOs UITextViews y UILabels para que su altura esté determinada por su contenido

He intentado varios métodos para recalcular la altura de mis UITextViews en función del contenido que se carga en ellos durante el tiempo de ejecución, y aunque muy laborioso e inane, he conseguido que funcione, pero luego se desangran sobre el UILabels posicionado en el xib debajo de ellos.

¿Realmente tengo que volver a calcular las coordenadas y de cada UILabel después de calcular el nuevo tamaño de las UITextViews? ¿Hay alguna manera de simplemente tener los elementos en el xib 'empujar' los elementos debajo de ellos según su nuevo tamaño?

¿Cuál es el enfoque correcto para configurar una UITableViewCell con varias vistas dinámicas de texto para que toda mi aplicación no esté compuesta de código para calcular alturas y coordenadas?

¿O es la respuesta que no debería estar poniendo más de una UITextView dinámica en la misma UITableViewCell?

Respuesta

2

he usado algo como esto para una celda para calcular su altura en

tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

función

CGSize labelSize = [self.comments sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] 
               constrainedToSize:CGSizeMake(280.0f, MAXFLOAT) 
                lineBreakMode:UILineBreakModeWordWrap]; 
    return labelSize.height + 20; 

+20 es para el relleno.

y también si tiene todas las celdas como la que menciona arriba, entonces puede crear una clase de UITableViewCell con los siguientes elementos UIView dentro de ella.

1

iOS no parece tener ningún tipo de motor de diseño de flujo, al menos ninguno que se me ocurra. Sin embargo, si sus etiquetas están ubicadas en la parte inferior de su UITableViewCell, es posible que pueda salirse con la configuración de la propiedad de máscara de autoresizing Mask de UILabel en UIViewAutoresizingFlexibleBottomMargin para que los UILabels se anclen en la parte inferior. Esto supone que ya ha ajustado el tamaño de UITableViewCell para que se ajuste a todos los controles. De lo contrario, creo que la mejor manera de manejar esto es volver a calcular las coordenadas y de las etiquetas.

0

Encontré útil agregar este tipo de comportamiento como una categoría en UIView para que una vista pueda cambiar el tamaño de una de sus subvistas para ajustar texto arbitrario y, opcionalmente, cambiar el tamaño de la vista principal para que se ajuste a la nueva subvista ampliada según sea necesario.

http://blog.carbonfive.com/2009/07/10/resizing-uilabel-to-fit-text/

+0

Gracias por esto. ¿Cómo se ha desenvuelto con el problema que luego se desarrolla cuando las etiquetas redimensionadas sangrarán sobre las etiquetas debajo de ellas? ¿Es necesario volver a calcular la coordenada y de cada etiqueta en la misma vista? – JohnRock

+0

Si solo cambia el tamaño de una única subvista, entonces eso no debería ser un problema, ya que puede usar resortes para posicionar la vista de tamaño relativo en la parte superior de su vista principal, colocar todas las otras subvistas con respecto a la inferior y cambiar el tamaño de la vista principal como el campo lable/texto crece. Cuando eso no es posible, entonces sí, necesita rediseñar sus subvistas después de redimensionarlas. Posiblemente solo llame a '-layoutSubviews', pero depende de cómo construya y administre sus vistas y si está animando este cambio. – Jonah

Cuestiones relacionadas