私は動的にサイズ変更されたテーブルを使用して、Today Extensionに取り組んでいます。私はコンテンツのサイズを変更するためにテーブルを取得することができました:
self.preferredContentSize = accountsTable.contentSize
ただし、テーブルのcontentSizeの方が大きいことはわかりますが、特定のサイズ(568ピクセル)よりも高くなることはありません。
これが組み込みの制限なのか、これを回避してより大きなビューを作成する方法があるのかはわかりません。以前の拡張機能(株式ウィジェット)の一部が大きくなる可能性があるようです。
他の人が同じ動作をしている。拡張機能をすぐに大きくしたり、ストックウィジェットのように[すべて表示]ボタンを使用したりして表示できるかどうかは誰でも知っていますか?
私はいくつかのテストを行いましたが、次の式を使用して、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横向き(52、205.5)iPhone 6ポートレート(27、540.5)
iPhone 6横(586、260.5)iPhone 6 Plusポートレート(62、61)
iPhone 6 Plus横(585、288)iPad Miniポートレート(535、85)
iPad Mini横長(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);
}
ウィジェットのアクティブな表示モードの最大の高さを取得するには、UIViewControllerで次のようにします。
let context = self.extensionContext
if let context = context{
let height = context.widgetMaximumSize(for: context.widgetActiveDisplayMode).height
}
現在の表示モードに関係なく、拡張およびコンパクトの最大の高さを個別に取得するには、次のようにします。
var context = self.extensionContext
if let context = context{
let compactHeight = context.widgetMaximumSize(for: .compact).height
let expandedHeight = context.widgetMaximumSize(for: .expanded).height
}