My Today扩展程序需要根据小部件显示的内容具有动态高度。我可以通过在最底部的元素上添加一个约束来实现此目的:底部布局指南的顶部小于或等于底部元素的底部,常数为0,优先级为999,乘数为1。
这完全可以在iPhone上正常工作-小部件的高度适合所有内容,并且在显示下一个小部件之前应用了默认的底部边距。
但是在iPad上,似乎将我的小部件的高度设置为等于最大高度,通知中心将允许小部件成为-在我的小部件下方有很多空间,几乎是全屏显示。
如何删除多余的空间?] >>
我确切地知道问题是什么,但不确定如何解决-请参阅“问题”部分。首先让我解释一下设置:
设置:
我在情节提要中设置了此扩展程序的视图,因此无法以编程方式进行任何操作。该视图由垂直堆叠的5个元素和水平堆叠的其他元素组成。这些是该垂直线从上到下的自动布局约束-此处未声明优先级为1000,乘数1:UILabel: height = 35, top space to top layout guide with constant of 10 UIButton: equal height and width to a different button (whose aspect ratio is 1:1, there is no fixed width/height), top space to label 10 UIButton: equal height and width to same button, top space to above button 8 UIButton: equal height and width to same button, top space to above button 8 UIButton: equal height and width to same button, top space to above button 8, bottom space to bottom layout guide <= 0 with priority 999
必要行为:
结果:
预期结果:
“ >>问题:所有按钮的宽高比约束最终都会在其发送systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:
时间接在小部件视图的高度上强加一个“隐式”高宽比约束,在该视图中,它以必需的优先级传递了必要的宽度(724)以进行布局高度为0(以压缩视图)为拟合级别优先级。这样一来,iPad上的小部件视图就很高了,该视图开始时就更宽了。但是没有实际的长宽比约束可以删除。本质上,因为我已将纵横比约束应用于所有按钮,所以今天扩展的高度取决于其宽度(将所有约束,纵横比以及其他因素一起考虑)。因此,扩展件的高度在很大的范围内都是笨拙的,并在iPad等广泛的设备上显示出来。按钮上的约束需要重新考虑或以某种方式进行调整。
示例项目:CloudApp可以提供sample project that demonstrates the issue,因此您可以下载并使用它。
我尝试过的事情:我尝试通过覆盖widgetMarginInsetsForProposedMarginInsets
并返回底部的0
来删除默认边距插图。这确实删除了默认的填充,因此降低了高度,但是在其下方仍然有很多额外的空间。
UILabel
有一个约束:标签的前导等于超级视图的前导-常数0,优先级1000,乘数1。如果我简单地将其更改为超级视图的前导margin,多余的底部间距就神奇地消失了。我想知道是否是因为元素变得太大,所以增加左间距的数量会减小它们的大小,但是我尝试将其设置为常规的前导并增加常数,但这并不能解决问题。但这只能解决iPad纵向拍摄的问题。而且它甚至无法完全解决它,每次您按下Notification Center时,它都从较大的高度开始,然后缩小到适当的大小。在景观中,它永远不会缩小到适当的大小。
尝试的解决方案:
My Today扩展程序需要根据小部件显示的内容具有动态高度。我可以通过在最底部的元素上添加一个约束来实现此目的:底部布局指南的顶部...