Программно определяем высоту расширения содержимого уведомления

Соотношение ширины и высоты для расширения уведомлений можно определить с помощью атрибута. UNNotificationExtensionInitialContentSizeRatio в расширении Info.plist файл. Но можно ли это значение как-то изменить после соответствующего UIViewController загружен?

Документация на сайте Apple указывает, что это действительно возможно:

Вы можете изменить размер вашего контроллера представления после загрузки вашего расширения.

Но как? Я пытался изменить основной расширение UIViewрама, вот так...

func didReceive(_ notification: UNNotification) {

    self.view.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: 100.0)
    self.view.setNeedsUpdateConstraints()
    self.view.setNeedsLayout()
}

... но только рамка представления корректно обновляется, оставляя весь контейнер уведомлений с пустой белой областью внизу.

Я также попробовал некоторые менее очевидные решения, в том числе изменение кадра в разных точках жизненного цикла контроллера и настройку UIWindowкадр напрямую. Ни один не был успешным до сих пор.

Любая идея, если высота может быть изменена программно?

Заранее спасибо за любой ответ.

1 ответ

Решение

Вы можете переопределить размер, используя preferredContentSize собственность UIViewController.

 func didReceive(_ notification: UNNotification) {

    self.preferredContentSize = CGSize(width: UIScreen.main.bounds.size.width, height: 200)
    self.view.setNeedsUpdateConstraints()
    self.view.setNeedsLayout() 
  // Image downloading work or other logic
}

Если вы правильно настроили автоматический макет для всех элементов управления, размер уведомления изменится правильно. Нет необходимости вызывать код изменения размера.

Другие вопросы по тегам