以编程方式定义通知内容扩展的高度

Posted

技术标签:

【中文标题】以编程方式定义通知内容扩展的高度【英文标题】:Programmatically defining the height of a notification content extension 【发布时间】:2017-11-16 12:06:38 【问题描述】:

通知扩展的宽高比可以通过扩展的Info.plist文件中的属性UNNotificationExtensionInitialContentSizeRatio来定义。但是在加载相应的UIViewController 之后,这个值可以以某种方式更改吗?

Apple 网站上的documentation 表明确实有可能:

您可以在扩展后更改视图控制器的大小 加载。

但是怎么做呢?我试过改变扩展的主要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】:

您可以使用 UIViewController 的 preferredContentSize 属性覆盖大小。

【讨论】:

是的,就是这样。谢谢! 上面写着Cannot override with a stored property 'preferredContentSize' 你需要在视图生命周期的某个地方设置它(例如viewDidLoad)。【参考方案2】:
 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

【讨论】:

【参考方案3】:

如果您为所有控件正确设置自动布局,通知将正确调整自身大小。无需调用任何调整大小代码。

【讨论】:

以上是关于以编程方式定义通知内容扩展的高度的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加内容时如何增加表格单元格的高度?

自定义 tableviewcell 动态高度未根据约束更新(以编程方式自动布局)

在 UIStackView 中以编程方式添加内容时的 UIScrollView 高度

我将如何(以编程方式)将 UITextView 的高度设置为其在 Swift 中的内容大小?

ios13通知内容自定义高度

以编程方式滚动到可扩展列表视图的底部,最后一项内容很大