23

私は iOS Today ウィジェットを構築しています。iOS 10 のテスト中に、すべてのウィジェットに同じ高さが与えられていることに気付きました (以前のバージョンでは開発者が高さを設定できました)。この新しい制限に対処するための理想的な高さ/ベストプラクティスは何ですか? 私は迅速で、autolayout fyiを使用しませんでした。前もって感謝します!

4

3 に答える 3

9

お気づきのとおり、iOS 10 のウィジェットは変更されており、高さが固定されています。今日の拡張機能にも新しい機能が追加されました。それらの 1 つですNCWidgetDisplayMode。基本的に、右隅にボタンがあり、「もっと表示」または「表示を減らす」ことができます。

に以下を追加することから始めますviewDidLoad()

self.preferredContentSize = CGSize(width: 0, height: 200)

if #available(iOSApplicationExtension 10.0, *) {
    self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
} else {
    // Fallback on earlier versions
}

次に行う必要があるのは、基本的に次のメソッドを追加することです。

迅速なバージョン:

@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if activeDisplayMode == NCWidgetDisplayMode.Compact {
        self.preferredContentSize = CGSizeMake(0.0, 200.0)
    }
    else if activeDisplayMode == NCWidgetDisplayMode.Expanded {
        self.preferredContentSize = desiredSize
    }

}

Objective-C バージョン:

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact){
        self.preferredContentSize = CGSizeMake(0.0, 200.0);
    }
    else if (activeDisplayMode == NCWidgetDisplayModeExpanded){
        self.preferredContentSize = desiredSize;
    }
}

ここで 2 つのことに注意してください。

Xcode は、iOS バージョン (少なくとも Swift の場合) で利用可能なチェックを追加することを自動的に提案します。したがって、これを行う古い方法を削除しないでください。 self.preferredContentSize = CGSizeMake...これは、古い iOS バージョンではまだ必要です。

このwidgetActiveDisplayModeDidChange関数activeDisplayMode == NCWidgetDisplayMode.Compactでは、[もっと表示] > [非表示] から移動したときに呼び出されます。これは、iOS システムからすぐにトリガーされるためです。そしてactiveDisplayMode == NCWidgetDisplayMode.Expanded、「Show less」>「Show more」に移動したときに呼び出されます。

最後にもう 1 つ、これは「もっと表示」と「表示を減らす」ボタンのバグのようなものであり、Apple によってまだ修正されていません。Apples Keynoteのデモンストレーションを確認すると、彼がこれにバグの問題を抱えていたことに気付くでしょう。

于 2016-09-18T07:02:57.600 に答える