web-dev-qa-db-ja.com

iOS 8 Today Extensionの最大の高さは?

私は動的にサイズ変更されたテーブルを使用して、Today Extensionに取り組んでいます。私はコンテンツのサイズを変更するためにテーブルを取得することができました:

    self.preferredContentSize = accountsTable.contentSize

ただし、テーブルのcontentSizeの方が大きいことはわかりますが、特定のサイズ(568ピクセル)よりも高くなることはありません。

これが組み込みの制限なのか、これを回避してより大きなビューを作成する方法があるのか​​はわかりません。以前の拡張機能(株式ウィジェット)の一部が大きくなる可能性があるようです。

他の人が同じ動作をしている。拡張機能をすぐに大きくしたり、ストックウィジェットのように[すべて表示]ボタンを使用したりして表示できるかどうかは誰でも知っていますか?

30
user2816488

私はいくつかのテストを行いましたが、次の式を使用して、Today Extensionの最大の高さを計算できます。

iPhoneの場合:

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

iPadの場合:

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

これはすべての画面サイズで機能するはずです...

15
Urkman

はい、preferredContentSizeに割り当てることができますが、CGSizeは最大の高さと幅に縮小されます。

デバイス方向(最大幅最大高さ):

iPhone 5Sポートレート(272441.5
iPhone 5S横向き(52205.5

iPhone 6ポートレート(27540.5
iPhone 6横(586260.5

iPhone 6 Plusポートレート(6261
iPhone 6 Plus横(585288

iPad Miniポートレート(53585
iPad Mini横長(535597

iPadポートレート(711985
iPadランドスケープ(967729

これらの値はどのように取得しましたか?

@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);
}
4
gklka

ウィジェットのアクティブな表示モードの最大の高さを取得するには、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
}
1
MobileMon