gpt4 book ai didi

ios - 今天 iPad 的扩展高度比指定的要大得多

转载 作者:IT王子 更新时间:2023-10-29 07:36:34 29 4
gpt4 key购买 nike

My Today 扩展需要有一个基于小部件显示内容的动态高度。我能够通过在最底部元素上添加约束来实现这一点:底部布局指南的顶部小于或等于最底部元素的底部,常量为 0,优先级为 999,乘数为 1。

这在 iPhone 上完全符合预期 - 小部件高度适合所有内容,并在显示下一个小部件之前应用默认底部边距。

但是在 iPad 上,它似乎将我的小部件的高度设置为等于最大高度通知中心将允许一个小部件 - 我的小部件下方有很多空间,它几乎是全屏的。

如何删除多余的空间?

我确切地知道问题是什么,但不知道如何解决它 - 请参阅“问题”部分。首先让我解释一下设置:

设置:
我在 Storyboard中设置了这个扩展的 View ,没有以编程方式完成。该 View 由 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 按钮网格
  • 每个按钮的宽度和高度应该完全相同 - 都是完美的正方形
  • 最后一行按钮下方没有多余的空间

  • 结果:
    enter image description here

    预期结果:
    enter image description here

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

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

    我试过的:
    我尝试通过覆盖 widgetMarginInsetsForProposedMarginInsets 来删除默认的边距插图并返回 0为底部。这确实删除了默认填充,因此稍微降低了高度,但它下面仍然有很多额外的空间。
    UILabel对此有一个限制:标签的前导等于 super View 的前导 - 常量 0,优先级 1000,乘数 1。如果我只是将其更改为 super View 的前导 margin ,额外的底部间距神奇地消失了。我想知道是不是因为元素变得太大,所以增加左间距的量会减小它们的大小,但我尝试将其设置为常规前导并增加常量,但这并没有解决问题。但这只能解决纵向 iPad 的问题。而且它甚至没有完全解决它,每次您下拉通知中心时,它都会从较大的高度开始,然后缩小到适当的大小。在风景中,它永远不会缩小到合适的尺寸。

    尝试的解决方案:
  • @Lefteris 建议对大小进行硬编码,这在这种情况下不起作用
    因为高度是动态的,并且小部件可用于许多屏幕
    尺寸/方向。
  • @Yuyutsu 试图解决它,但不幸的是它不符合要求,并且表现出冲突的约束和修改后的布局。
  • 最佳答案

    enter image description here

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

  • 你应该考虑你的约束。
  • 您的小部件默认边距插入未按照您希望的方式正确配置,因此通过调用“widgetMarginInsetsForProposedMarginInsets:”
  • 自行设置是唯一的解决方法。

    //更新小部件插入
    func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {

    println(NSStringFromUIEdgeInsets(defaultMarginInsets))
    return UIEdgeInsetsMake(20, 20, 10, 20)
    }

    修改后的示例文件链接:
    Modified file

    关于ios - 今天 iPad 的扩展高度比指定的要大得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30316577/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com