Extraño UIView-Encapsulated-Layout-Height Error

Estoy haciendo la aplicación de testing, así que en my tableviewCell en storyboard tengo imageView & webView (para mostrar html-text). Establecí restricciones como top / left / right / height = 200 para imageView, espaciando = 5 entre ellas y left / right / bot para webView, así que quiero calcular mi altura de webView mediante progtwigción y luego cambiar el tamaño de la celda para estirar mi webView. Pero tengo esto:

No se pueden satisfacer simultáneamente las restricciones.

Probablemente al less una de las restricciones en la siguiente list es una que no desea.

Prueba esto:

(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 & fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSLayoutConstraint:0x7fd6f3773f90 V:[UIImageView:0x7fd6f3773e90(200)]>", "<NSLayoutConstraint:0x7fd6f3774280 UIImageView:0x7fd6f3773e90.top == UITableViewCellContentView:0x7fd6f3462710.topMargin>", "<NSLayoutConstraint:0x7fd6f3774320 V:[UIImageView:0x7fd6f3773e90]-(5)-[UIWebView:0x7fd6f3462800]>", "<NSLayoutConstraint:0x7fd6f3774370 UITableViewCellContentView:0x7fd6f3462710.bottomMargin == UIWebView:0x7fd6f3462800.bottom>", "<NSLayoutConstraint:0x7fd6f375ee40 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fd6f3462710(205)]>" ) 

¿Alguna sugerencia?

Usualmente elimino esta advertencia bajando la prioridad de la restricción que AutoLayout intenta romper. Entonces, si dice:

 Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fd7c2ecb520 V:[UIView:0x7fd7c2ecd0e0(300)]> 

Adelante y baja esa prioridad a 999 .

Eso debería funcionar.

Aclamaciones.

si usa tableView.rowHeight = UITableViewAutomaticDimension , siempre debe establecer estimatedRowHeight . Por ejemplo:

 tableView.estimatedRowHeight = 44 

o deberías implementar:

 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 

de lo contrario, obtendrá siempre la advertencia UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView y el contenido se contraerá de forma incorrecta

Este error me sucedió con un UIButton intenta ajustar automáticamente su altura al crear un UIView-Encapsulated-Layout-Height que entra en conflicto con mis restricciones superiores e inferiores.

Lo arreglé añadiendo explícitamente una restricción de altura.

Para mí utilizo la altura estimada para las celdas, y para resolver este problema, establecí la prioridad de la restricción desde el background de la label a su vecino del 999 y funcionó.

Perdón por llegar tarde al juego. 🙂

Reducir la prioridad de la restricción que Autolayout está tratando de romper podría no ser la solución si se requiere la restricción en primer lugar.

Tuve este problema el otro día, así es como se veía mi layout:

  • OuterView <- C1: una restricción de ancho igual a su supervisión
    • StackView <- C2: una restricción de ancho igual a OuterView
      • ChildView <- C3: una restricción de ancho fijo, constante = StackView.frame.size.width

El problema ocurrió cuando estaba networkinguciendo el ancho de C1, así que obviamente porque C3 estaba en un ancho fijo que tomó el tamaño de fotogtwig original, la networkingucción de C1 causó conflictos y C1 se rompió por iOS para solucionar el problema.

El problema se solucionó rápidamente al configurar C3 para que tome WidthAnchor de StackView en lugar de su tamaño de cuadro.

Limitación equivocada

view.widthAnchor.constraint(equalToConstant: stackView.frame.size.width).isActive = true

Constreñimiento a la Derecha

view.widthAnchor.constraint(equalTo: stackView.widthAnchor, multiplier: 1.0).isActive = true

De esta forma, cada vez que C1 cambie, todas las restricciones secundarias reactjsrán de acuerdo con esto.

Conclusión:

  1. No creo que este error haya sido un error, como algunos han dicho.
  2. Resolver ajustando las obras de prioridad, pero ¿es el resultado deseado?
  3. Si está decidido a resolverlo sin prioridad, mire sus restricciones, especialmente las establecidas programáticamente, para verificar si hay conflictos. Si se trata de ancho o altura dinámica para sus vistas, como las vistas de celda, asegúrese de que la restricción de alto o ancho de la vista primaria no entre en conflicto con estos cambios dynamics y siga trabajando hacia arriba.

Estaba tratando de implementar una celda simple con una label superior de una línea y una label inferior de la línea n que se expandiría con text más largo, con la esperanza de que la celda se expandiera automágicamente para ajustarse al contenido según mis limitaciones.

Curiosamente para mí, la solución para esto fue anular – tableView:heightForRowAtIndexPath: y tableView:estimatedHeightForRowAtIndexPath: y devolver mi altura de fila estimada y UITableViewCellAutomaticDimension lugar de establecer rowHeight y estimatedRowHeight en my tableView en viewDidLoad: .