Программно определяем высоту расширения содержимого уведомления
Соотношение ширины и высоты для расширения уведомлений можно определить с помощью атрибута. 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
}
Если вы правильно настроили автоматический макет для всех элементов управления, размер уведомления изменится правильно. Нет необходимости вызывать код изменения размера.