コンパクトモードでiOS 10ウィジェットの高さを変更するのに苦労しています。
私が持っているのは空のウィジェットだけで、その中にビューはありません。それでも、コンパクトな高さに設定しても、それは無視されるようです。
これが私のコードです:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
}
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = CGSizeMake(0, 50);
}
else{
self.preferredContentSize = CGSizeMake(0, 200);
}
}
これはベータ版ソフトウェアの問題ですか? Xcode 8ベータ版とiOS 10ベータ版7を使用しています。
Cocoa Touchの新機能 WWDC 2016のセッションによると(44:00頃):
これで、ユーザー制御のサイズができました。 固定高さであるコンパクトモードと可変高さである拡張モード。
したがって、preferredContentSize
のNCWidgetDisplayModeCompact
の設定は完全に無視されているようです(固定サイズは110ptsのようです)。
In Swift 3:
次のTodayViewControllerのプロパティは、コンパクトモードの最大サイズを返します。
private var maxSizeForCompactMode: CGFloat {
return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}
1)表示モードをNCWidgetDisplayModeExpanded
のviewDidLoad
に設定します
override func viewDidLoad() {
super.viewDidLoad()
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}
2)このプロトコルメソッドを実装する
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
self.preferredContentSize = maxSize;
}
else {
self.preferredContentSize = CGSize(width: 0, height: 200);
}
}
prefferedContentSize
をviewDidAppear
以降に設定します。ビューが表示される前にウィジェットのサイズが変更されると思います。 iPhoneの画面の端との間のギャップのため、ウィジェットの幅はSCREEN_WIDTHではありません。