DPR
DPR

Reputation: 780

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.

Upvotes: 6

Views: 3320

Answers (3)

Ely
Ely

Reputation: 9141

If you properly setup auto layout for all controls, the notification will resize itself correctly. There is no need to call any resize code.

Upvotes: 0

Deepak Singh
Deepak Singh

Reputation: 251

 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
}

Upvotes: 4

Grzegorz Aperliński
Grzegorz Aperliński

Reputation: 918

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

Upvotes: 11

Related Questions