ios xcode swift ios8 today-extension

Altura máxima de iOS 8 Today Extension?



xcode swift (4)

Estoy trabajando en una extensión de hoy con una mesa de tamaño dinámico. He podido obtener la tabla para cambiar el tamaño del contenido usando:

self.preferredContentSize = accountsTable.contentSize

Sin embargo, he descubierto que no será más alto que un tamaño determinado (568 px) aunque puedo decir que la tabla contentSize es más grande.

No estoy claro si esto es un límite incorporado o si hay una manera de evitar esto para hacer una vista más grande. Parece que algunas extensiones anteriores (widget Stocks) pueden ser más grandes.

Cualquier otra persona corriendo en el mismo comportamiento. ¿Alguien sabe si es posible hacer que una extensión parezca más grande inmediatamente o usando un botón "Mostrar todo" como el widget Stock?


Hice algunas pruebas y puede calcular la altura máxima de su Extensión de Hoy con este formulario:

para Iphone:

float maxHeight = [[ UIScreen mainScreen ] bounds ].size.height - 126;

para iPad:

float maxHeight = [[ UIScreen mainScreen ] bounds ].size.height - 171;

Esto debería funcionar para todos los tamaños de pantalla ...


La forma recomendada es usar restricciones de diseño automático para restringir la altura de la vista.

Parece que el 568px es la altura máxima de tu iPhone 5 y no el tamaño real. Por lo que pude averiguar, no hay manera de obtener el tamaño real.


Ok, aunque puede asignar a preferredContentSize cualquier CGSize , se reduce a la altura y el ancho máximos.

Orientación del dispositivo ( ancho máximo , altura máxima ):

iPhone 5S Portrait ( 272 , 441.5 )
iPhone 5S Landscape ( 520 , 205.5 )

iPhone 6 Retrato ( 327 , 540.5 )
iPhone 6 Landscape ( 586 , 260.5 )

iPhone 6 Plus Portrait ( 362 , 610 )
iPhone 6 Plus Landscape ( 585 , 288 )

iPad Mini Retrato ( 535 , 853 )
iPad Mini Landscape ( 535 , 597 )

iPad Retrato ( 711 , 985 )
iPad Paisaje ( 967 , 729 )

¿Cómo obtuve estos valores?

@IBOutlet weak var sizerView: UIView!

dentro de viewDidLoad:

preferredContentSize = CGSizeMake(0, 2000) dispatch_after(1, dispatch_get_main_queue(), { //it needs time to render itself label.text = NSStringFromCGSize(self.sizerView.bounds.size) //here you have MAX VALUES }


Parece que iOS está agregando una UIView-Encapsulated-Layout-Height a sus propias restricciones:

( "<NSLayoutConstraint:0x610000280640 V:[_UILayoutGuide:0x7f92d0513810]-(500)-[UILabel:0x7f92d040cb20''Hello World'']>", "<NSLayoutConstraint:0x610000280690 V:[UILabel:0x7f92d040cb20''Hello World'']-(500)-[_UILayoutGuide:0x7f92d0515100]>", "<_UILayoutSupportConstraint:0x6100002a2f40 V:[_UILayoutGuide:0x7f92d0513810(0)]>", "<_UILayoutSupportConstraint:0x6100002a2ee0 V:|-(0)-[_UILayoutGuide:0x7f92d0513810] (Names: ''|'':UIView:0x7f92d040c810 )>", "<_UILayoutSupportConstraint:0x6100002a3000 V:[_UILayoutGuide:0x7f92d0515100(0)]>", "<_UILayoutSupportConstraint:0x6100002a2fa0 _UILayoutGuide:0x7f92d0515100.bottom == UIView:0x7f92d040c810.bottom>", "<NSLayoutConstraint:0x60800009e780 ''UIView-Encapsulated-Layout-Height'' V:[UIView:0x7f92d040c810(628)]>" )

Esta restricción obliga al widget a tener la altura máxima. Puede obtener su valor de esta manera:

- (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { for (NSLayoutConstraint *constraint in self.view.constraints) { if ([constraint.identifier isEqualToString:@"UIView-Encapsulated-Layout-Height"]) { NSLog(@"Height: %@", @(constraint.constant)); } } completionHandler(NCUpdateResultNewData); }