Today Extension: How to work with display mode?

11,335

Solution 1

Ok, i found right solution here.

1) Set the display mode to NCWidgetDisplayMode.expanded first in viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}

2) Implement new protocol method:

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
    if (activeDisplayMode == NCWidgetDisplayMode.compact) {
        self.preferredContentSize = maxSize
    }
    else {
        //expanded
        self.preferredContentSize = CGSize(width: maxSize.width, height: 200)
    }
}

And it will work as official apps.

Image

Solution 2

Here is a Objective-C one.

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
                         withMaximumSize:(CGSize)maxSize
{
    if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = maxSize;
    }
    else {
        self.preferredContentSize = CGSizeMake(0, 200);
    }
}
Share:
11,335
Vladius001
Author by

Vladius001

Updated on June 24, 2022

Comments

  • Vladius001
    Vladius001 almost 2 years

    Widgets now include the concept of display mode (represented by NCWidgetDisplayMode), which lets you describe how much content is available and allows users to choose a compact or expanded view.

    How to expand widget in ios 10.0? It doesn't work as in ios 9.

  • fakataha
    fakataha over 7 years
    I'm trying this so that I can set the widget to the height of my table view but it always comes through to the widgetActiveDisplayModeDidChange as .compact even though I set the extensionContext to expanded. Any ideas why display mode isn't being set?