Tengo problemas para cambiar el tamaño de tableHeaderView. Es simple no funciona.
1) Cree un UITableView y UIView (100 x 320 px);
2) Establezca UIView como tableHeaderView de UITableView;
3) Construye y listo. Todo está bien.
Ahora, quiero cambiar el tamaño de tableHeaderView, así que agrego este código en viewDidLoad:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
La altura de tableHeaderView debería aparecer con 200, pero aparece con 100.
Si escribo:
self.tableView.autoresizesSubviews = YES;
CGRect newFrame = myHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
myHeaderView.frame = newFrame;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
Luego comienza con 200 de altura, como quiero. Pero quiero poder modificarlo en tiempo de ejecución.
También probé esto, sin éxito:
self.tableView.autoresizesSubviews = YES;
self.tableView.tableHeaderView = myHeaderView;
self.tableView.tableFooterView = myFooterView;
CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = newFrame.size.height + 100;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView.tableHeaderView setNeedsLayout];
[self.tableView.tableHeaderView setNeedsDisplay];
[self.tableView setNeedsLayout];
[self.tableView setNeedsDisplay];
El punto aquí es: ¿Cómo cambiamos el tamaño de un tableHeaderView en tiempo de ejecución?
¿Alguien ha podido hacer esto?
Gracias
yo me
fuente
[tableView recalculateHeaderHeight]
cada vez.setTableHeaderView:
[tableview beginUpdates]
[tableview endUpdates]
Esta respuesta es antigua y aparentemente no funciona en iOS 7 y superior.
Me encontré con el mismo problema y también quería que los cambios se animaran, así que hice una subclase de UIView para mi vista de encabezado y agregué estos métodos:
Esto esencialmente anima todas las subvistas de UITableView que no son del mismo tipo de clase que la clase que llama. Al final de la animación, llama a setTableHeaderView en la supervista (el UITableView); sin esto, el contenido de UITableView retrocederá la próxima vez que el usuario se desplace. La única limitación que he encontrado en esto hasta ahora es que si el usuario intenta desplazarse por UITableView mientras se realiza la animación, el desplazamiento se animará como si la vista del encabezado no hubiera cambiado de tamaño (no es un gran problema si la animación es rápido).
fuente
Si desea animar condicionalmente los cambios, puede hacer lo siguiente:
Tenga en cuenta que la animación se divide en dos partes:
tableHeaderView
. Esto se hace usandobeginUpdates
yendUpdates
UIView
bloque de animación.Para sincronizar esas dos animaciones,
animationCurve
se debe configurarUIViewAnimationCurveEaseInOut
y la duración0.3
, que parece ser lo que UITableView usa para su animación.Actualizar
Creé un proyecto de Xcode en gihub, que hace esto. Consulta el proyecto
ResizeTableHeaderViewAnimated
en besi / ios-quickiesfuente
Creo que debería funcionar si establece la altura de myHeaderView así:
fuente
Usé la solución @garrettmoon anterior hasta iOS 7.
Aquí hay una solución actualizada basada en @ garrettmoon:
fuente
Esto funcionó para mí en iOS 7 y 8. Este código se ejecuta en el controlador de vista de tabla.
fuente
Es porque el creador de tableHeaderView.
Debe establecer la altura de UIView antes de establecer tableHeaderView. (Sería mucho más fácil si Apple abriera fuentes de este marco ...)
fuente
En iOS 9 y versiones anteriores,
tableHeaderView
no se volvería a diseñar después de cambiar su tamaño. Este problema se resuelve en iOS 10.Para solucionar este problema, hazlo con el siguiente código:
fuente
En iOS 9.x, hacer esto
viewDidLoad
funciona bien:headerView
se declara como@IBOutlet var headerView: UIView!
y está conectado en el guión gráfico, donde se coloca en la parte superior de tableView, para funcionar como tableHeaderView.fuente
Esto es solo para cuando usa el diseño automático y lo establece
translatesAutoresizingMaskIntoConstraints = false
en una vista de encabezado personalizada.La mejor y más sencilla forma es anular
intrinsicContentSize
. SeUITableView
utiliza internamenteintrinsicContentSize
para decidir el tamaño de su encabezado / pie de página. Una vez que haya anuladointrinsicContentSize
en su vista personalizada, lo que debe hacer es lo siguienteinvalidateIntrinsicContentSize()
tableView.setNeedsLayout()
ytableView.layoutIfNeeded()
Luego, el
UITableView
encabezado / pie de página se actualizará como desee. No es necesario configurar la vista nula o restablecer.Una cosa realmente interesante para el
UITableView.tableHeaderView
o.tableFooterView
es queUIStackView
pierde su capacidad para gestionarloarrangedSubviews
. Si desea usarUIStackView
como un tableHeaderView o tableFooterView, debe incrustar el stackView enUIView
y anularUIView
elintrinsicContentSize
.fuente
Para código Swift 5 probado
Nota: Debe proporcionar todas las restricciones de la subvista desde arriba, abajo, al principio, al final. Entonces obtendrá el tamaño requerido completo.
Referencia tomada de: https://useyourloaf.com/blog/variable-height-table-view-header/
fuente
Ajuste de la altura de la vista de encabezamiento propiedad
tableView.tableHeaderView
enviewDidLoad
no parece trabajo, la opinión de la altura del cabezal aún no cambia como se esperaba.Después de luchar contra este problema durante muchos intentos. Descubrí que puede cambiar la altura invocando la lógica de creación de la vista del encabezado dentro del
- (void)didMoveToParentViewController:(UIViewController *)parent
método.Entonces, el código de ejemplo se vería así:
fuente
Encontré que el inicializador initWithFrame de un UIView no respeta correctamente el rect que paso. Por lo tanto, hice lo siguiente que funcionó perfectamente:
La ventaja de esto es que está mejor encapsulado en su código de vista.
fuente
UIScreen
es una mala idea, ¿cómo reutilizarás tu vista?Implementé un cambio de altura animado del encabezado de la tabla para expandirlo a la pantalla general cuando se toca. Sin embargo, el código puede ayudar en otros casos:
fuente
Encabezado de cambio de tamaño de UITableView - UISearchBar con barra de alcance
Quería un
UITableView
con aUISearchBar
como encabezado de la tabla, así que tengo una jerarquía que se ve asíMétodos UISearchBarDelegate
Como se ha dicho en otra parte, si no estableceTableViewHeader después de cambiarlo, no sucederá nada.
fuente
Si el headerView personalizado está diseñado usando autolayout y headerView debe actualizarse después de la búsqueda web o una tarea perezosa similar. luego en iOS-Swift hice esto y actualicé mi headerView usando el código de abajo:
fuente
Obviamente, a estas alturas Apple debería haber implementado UITableViewAutomaticDimension para tableHeaderView y tableFooterView ...
Lo siguiente parece funcionar para mí usando restricciones de diseño:
fuente
Si su tableHeaderView es un webView de contenido ajustable, puede probar:
Lo probé en iOS9 y iOS11, funcionó bien.
fuente
¿Lo intentaste
[self.tableView reloadData]
después de cambiar la altura?fuente
- [UITableView reloadData]
solo está destinado a las vistas dinámicas (celdas) y también a los encabezados de sección que obviamente pensaste que estaban destinados;)