Сегодня Расширение высоты компактного режима в 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 и бета-версию iOS 10 7.


person Balázs Vincze    schedule 29.08.2016    source источник
comment
Насколько я могу судить, высота в компактном режиме не может быть ничем иным, как 110.   -  person dan    schedule 29.08.2016
comment
Но почему другие приложения работают на iOS 10 с размерами меньше 110?   -  person Balázs Vincze    schedule 29.08.2016
comment
Насколько я могу судить, все приложения Apple имеют высоту 110 в компактном режиме. Любые сторонние приложения, которые у вас есть, были бы созданы для iOS 9, поэтому их расширения были созданы до появления различных режимов отображения и будут продолжать работать так же, как и в iOS 9.   -  person dan    schedule 29.08.2016
comment
Так могло быть, да! В любом случае, я написал об ошибке в Apple, если что, по крайней мере, они скажут то же самое.   -  person Balázs Vincze    schedule 29.08.2016
comment
в iOS 11 эта высота равна 120 вместо 110   -  person BangOperator    schedule 04.01.2018


Ответы (4)


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

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

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

person spassas    schedule 09.09.2016
comment
Это не игнорируется полностью. Я заметил, что вам все еще нужно установить prefferedContentSize в widgetActiveDisplayModeDidChange, когда activeDisplayMode становится компактным. В противном случае это нарушает функциональность «показать больше/меньше». - person jesse; 25.01.2017
comment
Фиксированный размер НЕ всегда равен 110pt, он равен 130pt для iPad 12.9 (iOS12.1). Используйте 1_ - person Laevand; 24.04.2019

В SWIFT 3:

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

private var maxSizeForCompactMode: CGFloat {
    return extensionContext?.widgetMaximumSize(for: .compact).height ?? 0
}
person Bartłomiej Semańczyk    schedule 10.05.2017
comment
Может ли extensionContext быть нулевым или widgetMaximumSize может возвращать нулевой размер? - person Igor Palaguta; 13.06.2019

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

person Pranay    schedule 29.08.2016
comment
По сути, вы скопировали мой вопрос и перевели его на быстрый - person Balázs Vincze; 29.08.2016
comment
@BalázsVincze У меня работает с приведенным выше кодом. Прикрепил скриншот для ознакомления. - person Pranay; 29.08.2016
comment
Да, расширенный размер мне тоже подходит. у меня проблемы с компактностью - person Balázs Vincze; 29.08.2016
comment
Ok. Насколько я знаю, это ограничение для iOS10. 110 — минимальная высота для виджетов. - person Pranay; 29.08.2016
comment
А вот приложение Clear имеет размеры 50 даже iOS 10, плюс изменение компактного размера на больше 110 тоже не работает - person Balázs Vincze; 29.08.2016
comment
Есть ли метод, который мы можем услышать, чтобы узнать, когда виджет закончил анимацию изменения своего размера? - person Daniel Storm; 26.09.2016
comment
@BalázsVincze приложение Clear не обновлялось до iOS 10, поэтому виджеты, которые вы видите, были созданы для iOS 9, и поэтому к ним не применяются правила высоты iOS 10. Простой способ сказать, что старые виджеты имеют другой/более темный цвет фона. - person Matt Sephton; 13.02.2017
comment
Нравится ; использование даже в Swift XD - person Will Von Ullrich; 29.11.2017

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

person iamhite    schedule 07.03.2017