ios - resizing - uitableviewautomaticdimension
¿Cómo hacer que la altura de UITableView sea dinámica con la característica de autodiseño? (4)
Esto se prueba con la última versión de Xcode.
1) En Xcode vaya al guión gráfico y haga clic en la vista de tabla para seleccionarlo.
2) En el panel Utilidades (ver figura 1), asegúrese de que la restricción para la altura de la vista de tabla esté definida.
3) En el controlador de vista que muestra la vista de tabla, cree una salida a esta restricción:
En Swift 3
@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint!
En el objetivo C
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;
4) En el guión gráfico, regrese a la restricción de altura para UITableView
y verifique que el ícono de la derecha haya cambiado el color de púrpura a azul (vea la imagen 2)
4) También ponga este código en el mismo controlador de vista:
Rápido
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let height = min(self.view.bounds.size.height, tableView.contentSize.height)
dynamicTVHeight.constant = height
self.view.layoutIfNeeded()
}
C objetivo
- (void)viewWillAppear:(BOOL)animated
{
// just add this line to the end of this method or create it if it does not exist
[self.tableView reloadData];
}
-(void)viewDidLayoutSubviews
{
CGFloat height = MIN(self.view.bounds.size.height, self.tableView.contentSize.height);
self.dynamicTVHeight.constant = height;
[self.view layoutIfNeeded];
}
Esto debería solucionar tu problema.
Estos son los enlaces a dos versiones del proyecto de muestra que hace lo que usted desea, uno para Objective C y el otro para Swift 3. Descárguelo y pruébelo con Xcode. Ambos proyectos funcionan con la última versión de Xcode, Xcode 8.3.2.
https://github.com/jcatalan007/TestTableviewAutolayout https://github.com/jcatalan007/TestTableviewAutolayoutSwift
Estoy usando el autolayout en Xcode 5.
Establecí la altura de la vista de tabla en Mayor o igual a 200px. Quiero que tenga un tamaño dinámico. Porque a veces tendrá muchas filas, a veces tendrá algunas filas.
Pero el tamaño es siempre 200px. Y si el contenido es más grande que eso, debería desplazarme hacia abajo para ver las filas inferiores.
¿Qué debo hacer para dar el tamaño dinámico de la mesa de trabajo?
Puede presionar Ctrl + Arrastre la restricción de altura de su UITableView en el código fuente de su controlador de vista y darle un nombre. Luego, en updateViewConstraints de su ViewController puede establecer la constante de esa restricción en tableView.contentSize.height
....
@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint?
....
override func updateViewConstraints() {
super.updateViewConstraints()
tableViewHeightConstraint?.constant = tableView.contentSize.height
}
Se puede hacer programáticamente. El concepto (y el código en sí) es realmente muy simple:
En el método updateConstraints de la supervista de myTableView, agregue una restricción para que la altura de myTableView sea igual a myTableView.contentSize.height.
Probado en Xcode 6 para iOS 7.
crea tu celda por xib o guión gráfico. dar su contenido de salida. ahora llámalo en CellForRowAtIndexPath. p.ej. si desea establecer la altura de la celda de acuerdo con el texto de la etiqueta de Comentario.
así que establece tus comentariosLbl.numberOfLine = 0;
luego en ViewDidLoad
self.table.estimatedRowHeight = 44.0 ;
self.table.rowHeight = UITableViewAutomaticDimension;
y ahora
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
voila ............ lo hiciste ...