iOS 8 Today Extension的最大高度?

我正在使用dynamic大小的表进行今天的扩展。 我已经能够得到表格来调整内容的使用:

self.preferredContentSize = accountsTable.contentSize 

但是,我发现它不会比一定大小(568像素)更高,即使我可以告诉表contentSize更大。

我不清楚这是否是一个内置的限制,或者如果有解决这个问题的方法,可以制作一个更大的视图。 看起来,一些以前的扩展(股票小部件)能够变得更大。

其他任何人都陷入了同样的行为。 任何人都知道是否有可能使立即显示更大的扩展或使用“显示所有”button,如股票部件?

我做了一些testing,你可以用这个公式计算你的Today Extension的最大高度:

对于iPhone:

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

对于iPad:

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

这应该适用于屏幕尺寸…

好吧,虽然你可以分配到preferredContentSize任何CGSize它被降低到最大的高度和宽度。

设备方向( 最大宽度最大高度 ):

iPhone 5S肖像( 272,441.5
iPhone 5S风景( 520,205.5

iPhone 6肖像( 327,540.5
iPhone 6风景( 586,260.5

iPhone 6 Plus人像( 362,610
iPhone 6 Plus景观( 585,288

iPad Mini Portrait( 535,853
iPad迷你风景( 535,597

iPad肖像( 711,985
iPad风景( 967,729

我是如何得到这些价值的?

 @IBOutlet weak var sizerView: UIView! 

里面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 } 

看来,iOS是添加一个UIView-Encapsulated-Layout-Height约束到你自己的约束:

 ( "<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)]>" ) 

这个约束迫使小部件有最大的高度。 你可以得到这样的价值:

 - (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); } 

推荐的方法是使用自动布局约束来约束视图的高度。

看来568px只是你的iPhone 5的最大高度,而不是实际的大小。 据我所知,没有办法得到真正的大小。