iPad的今天扩展高度远远大于指定的高度

问题描述 投票:50回答:3

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

必要行为:

  • 我需要一个在单个全角标签下面的4x4按钮网格
  • 每个按钮的宽度和高度应该完全相同-都是完美的正方形
  • 按钮的最后一行下方没有多余的空间
  • 结果:

“在此处输入图像描述”

预期结果:

“在此处输入图像描述”“ >>

问题:所有按钮的宽高比约束最终都会在其发送systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:时间接在小部件视图的高度上强加一个“隐式”高宽比约束,在该视图中,它以必需的优先级传递了必要的宽度(724)以进行布局高度为0(以压缩视图)为拟合级别优先级。这样一来,iPad上的小部件视图就很高了,该视图开始时就更宽了。但是没有实际的长宽比约束可以删除。本质上,因为我已将纵横比约束应用于所有按钮,所以今天扩展的高度取决于其宽度(将所有约束,纵横比以及其他因素一起考虑)。因此,扩展件的高度在很大的范围内都是笨拙的,并在iPad等广泛的设备上显示出来。按钮上的约束需要重新考虑或以某种方式进行调整。

示例项目:CloudApp可以提供sample project that demonstrates the issue,因此您可以下载并使用它。

我尝试过的事情:我尝试通过覆盖widgetMarginInsetsForProposedMarginInsets并返回底部的0来删除默认边距插图。这确实删除了默认的填充,因此降低了高度,但是在其下方仍然有很多额外的空间。

UILabel有一个约束:标签的前导等于超级视图的前导-常数0,优先级1000,乘数1。如果我简单地将其更改为超级视图的前导margin,多余的底部间距就神奇地消失了。我想知道是否是因为元素变得太大,所以增加左间距的数量会减小它们的大小,但是我尝试将其设置为常规的前导并增加常数,但这并不能解决问题。但这只能解决iPad纵向拍摄的问题。而且它甚至无法完全解决它,每次您按下Notification Center时,它都从较大的高度开始,然后缩小到适当的大小。在景观中,它永远不会缩小到适当的大小。

尝试的解决方案:

  • @@ Lefteris建议对大小进行硬编码,在这种情况下不起作用由于高度是动态的,并且该小部件可用于许多屏幕尺寸/方向。
  • @@ Yuyutsu试图解决它,但很遗憾,它不满足要求,并且显示出相互矛盾的约束和经过修改的布局。
  • My Today扩展程序需要根据小部件显示的内容具有动态高度。我可以通过在最底部的元素上添加一个约束来实现此目的:底部布局指南的顶部...

ios ios8 autolayout ios-app-extension ios8-today-widget
3个回答
2
投票

enter image description here

这里是实现这一目标的方法:


0
投票

我面临着同样的问题。您是否添加了如图所示的底部填充约束?enter image description here


-1
投票

为了解决这个问题,我不得不在viewDidLoad委托方法上硬编码小部件的值:

© www.soinside.com 2019 - 2024. All rights reserved.