※本記事は、一般に公開されている情報 を元に作成しています
※図は 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" ボタンのことを指しているものと思われます。
このボタンが押される度に 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 の高さが調節できました