Conflictos de restricción de layout en el widget pnetworkingeterminado de hoy

He observado un comportamiento muy extraño con respecto a Autolayout en el widget de hoy que acabo de crear para mi aplicación. Tratando de llegar a la raíz del problema, terminé creando un nuevo proyecto simple de Xcode (aplicación de vista única) y añadí una extensión de hoy como un nuevo objective , sin siquiera tocarlo.

Cuando lanzo la extensión de hoy en mi dispositivo (iPhone 6s) lo primero que ocurre es que los conflictos de la restricción de layout se lanzan en la console:

2016-05-03 18:17:22.216 TodayExtension[10183:4611907] 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. ( "<_UILayoutSupportConstraint:0x15c665320 V:[_UILayoutGuide:0x15c6657b0(0)]>", "<_UILayoutSupportConstraint:0x15c663890 V:|-(0)-[_UILayoutGuide:0x15c6657b0] (Names: '|':UIView:0x15c6642a0 )>", "<_UILayoutSupportConstraint:0x15c666010 V:[_UILayoutGuide:0x15c666380(0)]>", "<_UILayoutSupportConstraint:0x15c666ed0 _UILayoutGuide:0x15c666380.bottom == UIView:0x15c6642a0.bottom>", "<NSLayoutConstraint:0x15c666b80 V:[_UILayoutGuide:0x15c6657b0]-(NSSpace(8))-[UILabel:0x15c6617c0'Hello World']>", "<NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]>", "<NSLayoutConstraint:0x15c552820 'UIView-Encapsulated-Layout-Height' V:[UIView:0x15c6642a0(0)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]> 

Observará que la última de las restricciones en la list es un UIView-Encapsulated-Layout-Height que fuerza una altura de 0 en la vista. Comprobé y pensé que la vista referenceda es la vista raíz del widget. Así que, por alguna razón, está más allá de mi comprensión, el sistema crea internamente una restricción de 0 píxeles de altura que entra en conflicto con la configuration de la vista en Interface Builder. (Como verás cuando creas una nueva extensión hoy en Xcode, no hay nada más que una UILabel que esté fijada a cada lado de la vista raíz del widget).

Normalmente diría que este es un gran error de iOS, pero como esta es la plantilla pnetworkingeterminada de Apple para crear Widgets de hoy, no puedo creer que esté roto. ¿Alguna idea de qué está causando este comportamiento conflictivo y cómo solucionarlo ( correctamente )?


Lo que básicamente estoy tratando de lograr con la recompensa …

… es averiguar si hay una forma confiable de usar Autolayout en un widget de hoy sin introducir varias soluciones y " hacks sucios " que no usaría dentro de una aplicación normal. (Si termina añadiendo muchas restricciones que crean frameworks fijos y no dejan que el contenido crezca dinámicamente, esa no es realmente la idea de Autolayout, ¿verdad?)


Una pregunta muy relacionada que es parte del problema y podría dar una pista:
El comportamiento de Widget Inconsistente Today rompe las restricciones de altura de la subvista.

En algunas de las subclasss UIView comunes de Apple, se UIView instancias con un tamaño de cero. NSLayoutConstraint configurar su NSLayoutConstraint para que puedan reactjsr adecuadamente a este tamaño inicial. En el pasado, he hecho que las restricciones superiores o inferiores sean una desigualdad, de modo que el rest de las restricciones pueden dimensionarse correctamente y no romper el layout.

Ej: Haga su restricción inferior ( <NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]> ) un LessThanOrEqualTo con un valor constant de 8.0 .

La forma en que he encontrado útil es restringir una vista en la parte superior e inferior, centrarla horizontalmente y restringir el ancho. Esto me ha dado buenos resultados en los widgets de hoy en los que he trabajado.