iphone - escalar UIScrollView contentSize para ajustar UIView con UITableView de altura variable dentro
ios (2)
Esto es sólo una suposición, pero dado que UITableView es una subclase de UIScrollView, ¿puedes usar la propiedad contentSize para ver su tamaño general después de una llamada a reloadData? Puede usar el tamaño de la vista de tabla para cambiar el tamaño de UIView y el tamaño de contenido de scrollView.
Tengo una uiview con un uiscrollview como una subvista en una punta. Luego, cargo otra uiview con uitableview como una subvista de esta otra uiview (entre otros elementos dentro de esta vista) como una subvista de la uiscrollview.
Es decir, UISCrollView -> UIView -> UITableView (y algunas otras vistas dentro de UIView).
Y necesito hacer lo siguiente:
Una vez que conozco la altura final de la tabla vista (dependiendo del número de celdas y su altura), necesito cambiar el tamaño de la vista que la contiene y, a su vez, cambiar el tamaño de la propiedad contentSize de la vista de desplazamiento que contiene.
Pero no sé en qué punto se conoce el tamaño final de la tabla (porque puede cambiar el tamaño de forma dinámica dependiendo de la cantidad de texto que contengan sus celdas) y tampoco sé por cuánto la tabla superará la uiview ( que por defecto es 320 x 460).
He intentado configurar la vista que contiene la vista de tabla a una altura de 900 en viewdidload y configurándola en sizeToFit, esperando que se reduzca a medida que se agregan tablecells a la vista de tabla (suponiendo que se agreguen celdas, el marco de la tabla se escalaría apropiadamente). Pero esto no parece funcionar.
¿Alguna idea? ¡Gracias!
Acabo de encontrarme en una situación similar (UIScrollView -> UITableView) y me estaba golpeando la cabeza durante horas. La respuesta corta es esta: los tamaños correctos para usar como base para dimensionar cosas no estaban disponibles hasta que mi ViewController (que gobierna el UIScrollView) se envió viewWillAppear:
Antes de eso, descubrí que los valores estaban establecidos, pero a menudo estaban equivocados. (Por ejemplo, mi primer intento de hacer esto fue en viewDidLoad:
y los valores de tamaño se cambiaron allí, pero estaban equivocados !)
Entonces mi solución fue así:
- En
viewDidLoad:
haga que su UITableView incluidoreloadData
una vez que tenga sus datos en su lugar. en
viewWillAppear:
haga lo siguiente (suponiendo quetableView
es el UITableView adjunto yscrollView
es el UIScrollView adjunto):tableView.frame = (CGRect){ tableView.frame.origin, tableView.contentSize }; // Finally, set content size based on the last element in the scrollView // in my case, the last element IS the tableView, yours might be different scrollView.contentSize = CGSizeMake(scrollView.width - scrollView.contentInset.left - self.scrollView.contentInset.right, tableView.top + tableView.height);
NB, estaba obteniendo algunos números muy extraños cuando los revisé antes de viewWillAppear:
por ejemplo, tableView.contentSize parecía ser el producto del número de filas rowHeight * predeterminado, ignorando mis alturas de fila personalizadas y excluyendo los separadores. Muy raro.