30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【iOS 10】Today Extension (Widget) の高さを調節する

Last updated at Posted at 2016-08-07

※本記事は、一般に公開されている情報 を元に作成しています
※図は What's New in iOS 10 - Overview - iOS Human Interface Guidelines より引用しています

これは何

iOS 10から NCWidgetDisplayMode という概念が追加されました。これに伴い、Today Extension(以下Widget)の高さを調節する方法も変わっています。何も対応しないとOSが決めた高さに固定されます。
この記事ではiOS 10で Widget の高さを調節する方法を解説します。

検証環境

  • Xcode 8 beta 4

NCWidgetDisplayModeとは

公式ドキュメントには次のように書かれています。

The modes that can be toggled between when the More button is activated within a widget running in iOS.

"More button" というのは下図の "Show More" ボタンのことを指しているものと思われます。

image

このボタンが押される度に NCWidgetDisplayMode が切り替わります。値は

  • Compact (default)
  • Expanded

が用意されています。

高さを調節する

NCWidgetDisplayModeExpanded をセットします。こうすることで Widget に「Show More」ボタンが現れ、ユーザが高さを調節することができるようになります。(iOS 10未満のデバイスで実行するとクラッシュするので注意)

override func viewDidLoad() {
    super.viewDidLoad()
    self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.Expanded
}

次に widgetActiveDisplayModeDidChange を実装します。このメソッドは名前の通り NCWidgetDisplayMode が変更される度に呼ばれます。

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
    if (activeDisplayMode == NCWidgetDisplayMode.Compact) {
        self.preferredContentSize = maxSize;
    }
    else {
        self.preferredContentSize = CGSize(width: 0, height: 200);
    }
}

activeDisplayMode に現在のモードが渡ってくるので、それによって Widget のサイズを調整します。設定できる最大サイズは maxSize で取得できます。

これで Widget の高さが調節できました :smile:

参考リンク

30
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?