今日のウィジェット拡張機能の高さを設定する方法は?
-
21-12-2019 - |
質問
通知センターでアプリのToday拡張機能の高さを変更するにはどうすればよいですか?
私はインターフェイスビルダーとコードでそれを試しました, Interface Builderは高さ600のビューを表示しますが、デバイスにこの高さを適用していません。
それは私がそれをいくつかの80ピクセルより大きくすることはできないようです。..
解決
あなたのウィジェットで UIViewController.m
(客観的-C):
self.preferredContentSize = CGSizeMake(0, 200);
あなたのウィジェットは200の高さを持つようになります。
ウィジェットは自動的に処理される通知センターの正確な幅に収まる必要があるため、幅はビューに影響しないことに注意してください。
また、ビューの高さの変更をアニメーション化する場合は、(Objective-C)を実装できます。:
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
ビューコントローラでは、次を使用して -animateAlongsideTransition:completion:
答えは少し隠されていました;最終的に見つけるには、ドキュメントサイドバーをクリックする必要がありました この素晴らしい文書.
別の方法は使用することです 自動レイアウト制約 ビューの高さを制限します。
他のヒント
ウィジェットはシステムによってそれらの高さを調整しています。制約を使用して高さを定義した場合、これは必要に応じて自動的に調整されます。明示的なレイアウトを使用している場合は、ウィジェットのpreferredContentSize
を変更して新しい高さを要求できます。
あなたはあなたの高さの要求を尊重する保証通知センターがないことに注意してください。
ウィジェットを開発するための最良の方法は、自動レイアウトの制約を使用して高さの値を設定することです。そのように、ウィジェットは簡単に異なる高さに適応します。
IOS10拡張機能の高さは110ピクセルです。新しいプロトコルメソッドを使用する必要があります widgetActiveDisplayModeDidChange:withMaximumSize:
拡張サイズを拡張するには(Objective-C):
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
withMaximumSize:(CGSize)maxSize {
if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
self.preferredContentSize = CGSizeMake(maxSize.width, 600.0);
} else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
self.preferredContentSize = maxSize;
}
}
また、電話する必要がある場合があります setWidgetLargestAvailableDisplayMode:
今日のビューコントローラの拡張コンテキストで viewDidLoad
このような方法(Objective-C):
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
このスレッドは役に立つかもしれません https://forums.developer.apple.com/thread/48930
最善の方法はもちろんオートレイアウトですが、デフォルトではこの
のようにコントロールできるマージンがあります。func widgetMarginInsetsForProposedMarginInsets
(defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
return UIEdgeInsetsZero
}
. 今日の拡張子を表示する方法は2つあります。
- コンパクトモード(ウィジェットの固定高さ)
- モード(ウィジェットの可変の高さ)
コンパクトモードで拡張モードの高さを変更するために行うコードは何でも違いはありません。そのため、モードをコンパクトに変更するにはモードを変更する必要があります。
// 1. Load This in viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}
// 2. Implement another widget protocol
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
if (activeDisplayMode == NCWidgetDisplayMode.compact) {
self.preferredContentSize = maxSize;
}
else {
self.preferredContentSize = CGSize(width: 0, height: 200);
}
}
.
App Extensions
に関する詳細については、WWDCを参照できます。今日のウィジェットuiedGeInsets DefaultMarginInsets. (uiedGeinsets)DefaultMarginInsets=(TOP= 0、左= 44、BOTTOM= 39、右= 0)
このメソッド
を追加する必要があります- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}
.