Search code examples
iosiphonenotificationsusernotificationsui

Programmatically defining the height of a notification content extension


The width:height ratio of a notification extension can be defined through attribute UNNotificationExtensionInitialContentSizeRatio in the extension's Info.plist file. But can this value somehow be changed after the respective UIViewController is loaded?

The documentation on Apple's site indicates that it is indeed possible:

You can change the size of your view controller after your extension loads.

But how? I've tried changing the extension's main UIView's frame, like so...

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

...but only the view's frame is correctly updated, leaving the whole notification container with an empty white area at the bottom.

I've also attempted some less obvious solutions, including changing the frame at different points in the controller's lifecycle and setting the UIWindow's frame directly. None were successful so far.

Any idea if the height can be changed programmatically?

Thank you in advance for any answer.


Solution

  • You can override the size by using the preferredContentSize property of UIViewController.