9

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.

Sahil Kapoor
  • 11,183
  • 13
  • 64
  • 87
Vladius001
  • 720
  • 1
  • 6
  • 11

2 Answers2

49

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

odemolliens
  • 2,581
  • 2
  • 32
  • 34
Vladius001
  • 720
  • 1
  • 6
  • 11
  • 2
    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? – fakataha Oct 16 '16 at 23:16
8

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);
    }
}