Wie stelle ich die Höhe einer Heute-Widget-Erweiterung ein?
-
21-12-2019 - |
Frage
Wie kann ich die Höhe der Heute-Erweiterung meiner App im Benachrichtigungscenter ändern?
Ich habe es mit dem Schnittstellenbauer ausprobiert und mit Code zeigt der Schnittstellenbauer die Ansicht mit Höhe 600 an, weist diese Höhe jedoch nicht auf dem Gerät an.
Es scheint, dass ich es nicht größer als etwa 80 Pixel hinbekomme ...
Lösung
in Ihrem Widget generationstabedagcode (objektiv-c):
generasacodicetagpre.lässt Ihr Widget eine Höhe von 200 haben.
Beachten Sie, dass die Breite keinen Einfluss auf die Ansicht hat, da Widgets in die genaue Weite des Benachrichtigungszentrums passen müssen, was automagisch behandelt wird.
Wenn Sie auch Änderungen in der Höhe Ihrer Ansicht animieren möchten, können Sie (objektive-c) implementieren können:
generasacodicetagpre. in Ihrem Ansichtssteuergerät mit UIViewController.m
< / p>
Die Antwort war ein bisschen verborgen; Sie mussten in der Dokumentationsseite klicken, um sich schließlich zu finden Dieses fantastische Dokument .
Eine andere Möglichkeit ist die Verwendung von Auto-Layout-Einschränkungen , um die Höhe Ihrer Sicht aufzuschränken.
Andere Tipps
Die Höhe von Widgets wird vom System angepasst.Wenn Sie Ihre Höhe mithilfe von Einschränkungen definiert haben, wird diese bei Bedarf automatisch angepasst.Wenn Sie ein explizites Layout verwenden, können Sie eine neue Höhe anfordern, indem Sie das ändern preferredContentSize
Ihres Widgets.
Beachten Sie, dass Sie keine Garantie dafür haben, dass das Benachrichtigungszentrum Ihren Größenwunsch respektiert:Es kann sein, dass es automatisch angepasst wird, es kann sein, dass es angepasst wird, aber nicht genau auf die gewünschte Höhe, oder dass es überhaupt nicht berücksichtigt wird.
Der beste Weg, ein Widget zu entwickeln, besteht darin, Auto-Layout-Einschränkungen zu verwenden, um Ihre Höhenwerte festzulegen. Auf diese Weise passt sich Ihr Widget problemlos an unterschiedliche Höhen an.
Seit iOS 10 beträgt die Höhe der Erweiterung 110 Pixel.Sie sollten eine neue Protokollmethode verwenden widgetActiveDisplayModeDidChange:withMaximumSize:
So erweitern Sie die Erweiterungsgröße (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;
}
}
Möglicherweise müssen Sie auch anrufen setWidgetLargestAvailableDisplayMode:
auf Ihrem Erweiterungskontext in den heutigen View-Controllern viewDidLoad
Methode wie diese (Objective-C):
if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
[self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}
Dieser Thread könnte hilfreich sein https://forums.developer.apple.com/thread/48930
Der beste Weg ist natürlich Autolayout, aber standardmäßig gibt es Margen, die Sie so kontrollieren können
generasacodicetagpre.Es gibt zwei Möglichkeiten, die heute Erweiterung zu zeigen:
- .
- Compact-Modus (Feste Höhe für Widget)
- Erweiterungsmodus (variable Höhe für Widget)
Welchen Code, den Sie tun, um die Erweiterungshöhe im Kompaktmodus zu ändern, macht keinen Unterschied.Sie müssen also den Modus von Compact in den Erweiterungsmodus ändern.
generasacodicetagpre.Sie können WWDC für weitere Updates zu App-Erweiterungen beziehen
heute widget standard uiegginets defaugMarginInsets (Uiegiesets) defaultmargininsets= (top= 0, links= 44, unten= 39, rechts= 0)
Sie sollten diese Methode hinzufügen
generasacodicetagpre.