38

通知センターでアプリの Today 拡張機能の高さを変更するにはどうすればよいですか?

インターフェイスビルダーとコードで試してみましたが、インターフェイスビルダーは高さ600のビューを表示しますが、デバイスにこの高さを適用していません。

80ピクセル程度より大きくすることはできないようです...

ここに画像の説明を入力

4

6 に答える 6

76

ウィジェットUIViewController.m(Objective-C) で:

self.preferredContentSize = CGSizeMake(0, 200);

ウィジェットの高さを 200 にします。

ウィジェットは自動的に処理される通知センターの正確な幅に収まる必要があるため、幅はビューに影響を与えないことに注意してください。

また、ビューの高さの変化をアニメーション化する場合は、(Objective-C) を実装できます。

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

を使用してView Controllerで-animateAlongsideTransition:completion:

答えは少し隠されていました。最終的にこの素晴らしいドキュメントを見つけるには、ドキュメントのサイドバーをクリックする必要がありました。


もう 1 つの方法は、自動レイアウト制約を使用してビューの高さを制約することです。

于 2014-06-04T16:01:56.203 に答える
16

ウィジェットの高さはシステムによって調整されます。制約を使用して高さを定義した場合、これは必要に応じて自動的に調整されます。明示的なレイアウトを使用している場合preferredContentSizeは、ウィジェットの を変更して新しい高さをリクエストできます。

通知センターが高さの要求を尊重する保証はないことに注意してください。自動的に調整される場合もあれば、調整されても希望の高さにならない場合もあれば、まったく受け入れられない場合もあります。

ウィジェットを開発する最良の方法は、自動レイアウト制約を使用して高さの値を設定することです。これにより、ウィジェットがさまざまな高さに簡単に適応できるようになります。

于 2014-06-04T15:57:09.960 に答える
15

iOS 10 拡張機能の高さは 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:また、今日のView Controllerのメソッドで、次のように拡張コンテキストを呼び出す必要がある場合があります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

于 2016-10-29T19:40:16.280 に答える
8

Today エクステンションを表示するには、次の 2 つの方法があります。

  1. コンパクト モード (ウィジェットの高さは固定)
  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);
  }
}

アプリ拡張機能の詳細については、WWDC を参照してください。

于 2016-11-14T12:19:41.477 に答える
1

今日のウィジェットのデフォルト UIEdgeInsets defaultMarginInsets (UIEdgeInsets) defaultMarginInsets = (上 = 0、左 = 44、下 = 39、右 = 0)

このメソッドを追加する必要があります

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}
于 2016-08-03T13:38:18.620 に答える