iOS 今日小组件高度神秘问题

4
我正在开发一个iOS的Today Extension,但是我在扩展高度上遇到了问题。我已经尝试过多次从头开始,但似乎不能找出额外高度来自哪里。我的AutoLayout有什么问题吗?谢谢。
故事板视图: Storyboard View 场景视图: Scene View 视图大小检查器: Size Inspector 结果: Simulator 我也尝试使用以下内容,但它显示了这个:
override func viewDidLoad() {
    super.viewDidLoad()
    self.preferredContentSize = CGSizeMake(0, 100);
}

PreferredContentSize

编辑:这可能是iOS的一个bug吗?

我已经花了很长时间在模拟器和实际设备上不断尝试,而且我已经注意到了一个可重复的模式。如果我在模拟器上重置内容和设置,然后运行Today Extension,它会填满整个空间(即使它没有遵守我的100高度约束),但是一旦我“停止”运行,视图就会缩小到100高度,并且底部会出现额外的填充。还有其他人遇到这个问题吗?这是个bug还是我自己引起的问题?

第一次运行时,“正在运行”:

First run, while running

“停止”后和随后的“运行”:

After 'stopping'


我注意到每当我做出更改时,如果在模拟器上重置内容和设置,更改似乎可以正常工作。但是,每当我尝试重新运行小部件(不重置),它就会缩小视图的高度,直到我再次重置内容和设置。 - Shawn H.
你解决了这个问题吗?我也遇到了完全相同的问题。将扩展从“今天”屏幕中删除并重新添加可以解决它,直到下一次运行或刷新为止。 - bgolson
@bgolson - 不,我从来没有想明白。我把它归咎于系统缺陷。 - Shawn H.
感谢您的跟进!终于找到答案并在下面发布了。 - bgolson
1个回答

5

终于找到问题所在!苹果的默认边距非常荒谬,特别是底部的边距。而改变它们的唯一方法是实现widgetMarginInsetsForProposedMarginInsets方法。以下是Swift代码:

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

1
UIEdgeInsetsZero也可以使用。它是一个常量,表示所有字段都设置为零。 - Dylan Bettermann
@bgolson 非常感谢您!! - Klaas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接