iOS Today 扩展神秘高度

Posted

技术标签:

【中文标题】iOS Today 扩展神秘高度【英文标题】:iOS Today Extension Mystery Height 【发布时间】:2015-01-31 04:47:16 【问题描述】:

我目前正在开发 ios Today Extension,但我遇到了扩展高度的问题。我已经从头开始尝试过多次,但我似乎无法弄清楚额外高度的来源。自动布局我在哪里出错了。谢谢。

故事板视图:

场景视图:

尺寸检查器:

结果:

我也尝试使用以下内容,它是这样说的:

override func viewDidLoad() 
    super.viewDidLoad()
    self.preferredContentSize = CGSizeMake(0, 100);

编辑:这可能是 iOS 错误吗?

我已经为此苦苦思索了一段时间,但我注意到模拟器和物理设备上有一个可重复的模式。如果我在模拟器上重置内容和设置,然后在其上运行 Today Extension,它会填满整个空间(即使它不遵守我的 100 个高度限制),但是一旦我“停止”运行它,视图就会缩小到 100高度,底部有这个额外的填充。有没有其他人经历过这个?这是一个错误还是我造成的?

第一次运行,同时“运行”:

在“停止”和随后的“运行”之后

【问题讨论】:

我注意到,每当我进行更改时,如果我在模拟器上重置内容和设置,更改似乎可以正常工作。每当我尝试再次运行 Today Extension(不重置)时,它会缩小视图的高度,直到我再次重置内容和设置。 你有没有想过这个问题?我有完全相同的问题。将扩展程序删除并重新添加到“今日”屏幕会修复它,直到您下次运行或刷新它。 @bgolson - 不,我一直无法弄清楚。我把它归结为系统错误。 感谢您的跟进!终于找到答案了,贴在下面。 【参考方案1】:

终于找到问题了!苹果有荒谬的默认边距,尤其是在底部。更改它们的唯一方法是实现 widgetMarginInsetsForProposedMarginInsets 方法。这是快速代码:

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets 
    return UIEdgeInsetsZero

【讨论】:

UIEdgeInsetsZero 也可以使用。它是一个常量,表示所有设置为零的字段。 @bgolson 非常感谢!!

以上是关于iOS Today 扩展神秘高度的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS Today 扩展的 Firebase 分析(小部件扩展)

带有核心数据的 iOS Today 扩展

iOS 8 beta - Today 扩展无法识别嵌入式框架

iOS Today 扩展/小部件——位置权限?

无法在模拟器中运行 Today 扩展小部件(iOS 8)

Today 扩展的安装