uitableview autolayout ios8

uitableview dynamic height



iOS 8 Hoy la altura de ajuste de Widget de UITableView usando Diseño Automático (2)

Encontré una solución , compila y renderiza según lo deseado, pero desencadena una advertencia.

Constantes en Interface Builder

Simplemente haga que la vista de tabla se adhiera a los bordes de vista del controlador de vista.

Constantes en el código

En viewWillAppear , podemos establecer que la altura de la vista del controlador de vista sea la misma que la vista de tabla contentSize .

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:self.tableView.contentSize.height]; heightConstraint.priority = UILayoutPriorityRequired; [self.view addConstraint:heightConstraint]; [self.view needsUpdateConstraints]; [self.view setNeedsLayout];

La advertencia

El código anterior funciona bien, y también resuelve tener que agregar la restricción de salida en la altura de la vista de tabla, pero genera esta advertencia:

Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don''t want. Try this: (1) look at each constraint and try to figure out which you don''t expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you''re seeing NSAutoresizingMaskLayoutConstraints that you don''t understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSLayoutConstraint:0x7af81290 ''UIView-Encapsulated-Layout-Height'' V:[UIView:0x7af7f560(171)]>", "<NSLayoutConstraint:0x7e1c1010 V:[UIView:0x7af7f560(132)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7af81290 ''UIView-Encapsulated-Layout-Height'' V:[UIView:0x7af7f560(171)]> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Estoy trabajando con una extensión de hoy, que muestra una UITableView . Solo hay un par de elementos, pero también tengo filas vacías.

Puedo usar Diseño automático con una restricción de salida en la altura de la vista de tabla para cambiar el tamaño de la tabla y adaptarla solo a las filas con contenido.

Lo que no puedo hacer es cambiar el tamaño del widget para ajustar la vista de tabla. En este momento me queda una mesa de tamaño adecuado y mucho espacio vacío.


Si desea que el controlador del widget sea el alto de tableView, haga esto:

self.preferredContentSize = self.tableView.contentSize;

Debe configurar esto cada vez que vuelva a cargar sus datos de tableView y la altura cambiará. No tiene que preocuparse por el ancho de contentSize porque el sistema lo ignora.

Para corregir su respuesta anterior, deberá agregar:

self.view.translatesAutoresizingMaskIntoConstraints = NO;

Eso debería arreglar las advertencias de restricción.