web-dev-qa-db-ja.com

新しいiOS 10 Todayウィジェット/拡張機能の高さは?

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

23
user3658503

IOS 10では、デフォルトで、今日のウィジェットの高さが固定されています。さらに、折りたたまれたウィジェットの最小の高さは制限されています。

折りたたまれたウィジェットは、約2行半のテーブル行の高さです。拡張されたウィジェットは、画面の高さよりも高くないことが理想的です。

これらのメモは iOS Human Interface Guidelines からのものです。

以下を実行して変更できます。

まず、これらのコードをviewDidLoadに追加する必要があります。これにより、ウィジェットはiOS 10の新しい2つのモードをサポートするようになります。

迅速なバージョン:

if #available(iOSApplicationExtension 10.0, *) { // Xcode would suggest you implement this.
    extensionContext?.widgetLargestAvailableDisplayMode = .expanded
} else {
    // Fallback on earlier versions
}

ObjCバージョン:

self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;

そして、次のようなプロトコルメソッドを実装します。

迅速なバージョン:

@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if activeDisplayMode == .expanded {
        preferredContentSize = CGSize(width: 0.0, height: 200.0)
    } else if activeDisplayMode == .compact {
        preferredContentSize = maxSize
    }
}

ObjCバージョン:

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

ターゲットを実行すると、ウィジェットの右隅に「もっと見る」ボタンが表示されます。それをタップすると、変更が表示されます。

詳細を参照してください: iOS 10でウィジェットの高さを変更するには?

43
yys

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

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

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

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

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

Swiftバージョン:

@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バージョンでも引き続き必要です。

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

最後にもう1つ、これはまだ「もっと表示」ボタンと「少なく表示」ボタンがあるバグのようなもので、Appleによってまだ修正されていません。 デモを確認してください Apples Keynoteから、これに関するバグの問題が発生していることがわかります。

9
Rashwan L

次の手順を実行します。

let height = extensionContext?.widgetMaximumSize(for: .compact).height

両方を使用できます:.compactおよび.expanded タイプ。