Сегодня высота компактного режима Extension в iOS 10

Я пытаюсь изменить высоту своего виджета iOS 10 в компактном режиме.

Все, что у меня есть, это пустой виджет, в нем нет представлений. Тем не менее, независимо от того, что я установил для компактной высоты, он, кажется, игнорирует его.

Вот мой код:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];

}

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize{
    if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = CGSizeMake(0, 50);
    }
    else{
        self.preferredContentSize = CGSizeMake(0, 200);
    }
}

Это может быть проблема с бета-программным обеспечением? Я нахожусь в Xcode 8 beta и iOS 10 beta 7.

Ответы

Ответ 1

В соответствии с Что нового в сеансе Cocoa Touch от WWDC 2016 (около отметки 44:00):

Теперь мы имеем размер, контролируемый пользователем. Компактный режим, фиксированная высота, а расширенный режим - переменная высота.

Итак, кажется, что установка prefferedContentSize для NCWidgetDisplayModeCompact полностью игнорируется (фиксированный размер составляет 110pts).

Ответ 2

1) Установите режим отображения NCWidgetDisplayModeExpanded в viewDidLoad

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

2) Внедрить этот метод протокола

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

iOS 10 Widget

Ответ 3

В SWIFT 3:

Следующее свойство вашего TodayViewController вернет максимальный размер для компактного режима:

private var maxSizeForCompactMode: CGFloat {
    return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}

Ответ 4

установите prefferedContentSize в viewDidAppear или после этого. Я предполагаю, что виджет изменит размер перед представлением. Ширина виджетов не является SCREEN_WIDTH из-за разрыва между краем экрана iPhone.