La hauteur du mode d'affichage des widgets d'aujourd'hui ne peut pas être définie pour le mode compact. Quelle que soit la valeur que je fixe. Il définit la hauteur du widget sur une valeur par défaut. Le mode étendu fonctionne parfaitement et la valeur est correctement définie et reflétée dans le widget. J'ai déjà ajouté cette ligne dans ma méthode viewDidLoad ().
self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
Voici le code. La valeur de maxSize ne peut pas non plus être modifiée car c'est une constante.
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
//self.preferredContentSize = (activeDisplayMode == .compact) ? maxSize : CGSize(width: maxSize.width, height: 300)
if activeDisplayMode == NCWidgetDisplayMode.compact
{
self.preferredContentSize = CGSize(width: maxSize.width, height: 300)
}
else
{
self.preferredContentSize = CGSize(width: maxSize.width, height: 560)
}
}
La hauteur du widget dans iOS 10 est exactement de 110 en mode compact. Il peut être réglé à la hauteur souhaitée en mode étendu, mais en mode compact, il sera toujours de 110 et cela ne peut pas être écrasé.
Essayez de définir self.preferredContentSize à la méthode viewDidLoad. Voici le code complet:
Swift
override func viewDidLoad() {
super.viewDidLoad()
self.preferredContentSize = CGSize(width:self.view.frame.size.width, height:210)
if #available(iOSApplicationExtension 10.0, *) {
self.extensionContext?.widgetLargestAvailableDisplayMode = .expanded
}
}
@available(iOS 10.0, *)
@available(iOSApplicationExtension 10.0, *)
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == .expanded {
self.preferredContentSize = CGSize(width: self.view.frame.size.width, height: CGFloat(3)*self.tableView.rowHeight)
}else if activeDisplayMode == .compact{
self.preferredContentSize = CGSize(width: maxSize.width, height: 110)
}
}
veuillez utiliser votre taille pour votre application.
L'espoir résoudra votre problème.
Pour obtenir la hauteur maximale du mode d'affichage actif des widgets, faites-le dans votre UIViewController
let context = self.extensionContext
if let context = context{
let height = context.widgetMaximumSize(for: context.widgetActiveDisplayMode).height
}
Pour obtenir la hauteur maximale d'agrandissement et de compactage individuel quel que soit le mode d'affichage actuel, procédez comme suit:
var context = self.extensionContext
if let context = context{
let compactHeight = context.widgetMaximumSize(for: .compact).height
let expandedHeight = context.widgetMaximumSize(for: .expanded).height
}