質問

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

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

それは私がそれをいくつかの80ピクセルより大きくすることはできないようです。..

enter image description here

役に立ちましたか?

解決

あなたのウィジェットで 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. コンパクトモード(ウィジェットの固定高さ)
  2. モード(ウィジェットの可変の高さ)
  3. コンパクトモードで拡張モードの高さを変更するために行うコードは何でも違いはありません。そのため、モードをコンパクトに変更するにはモードを変更する必要があります。

    // 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;}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top