gpt4 book ai didi

ios - 不一致的今天小部件行为打破了 subview 的高度限制

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:50 25 4
gpt4 key购买 nike

这个问题与我刚刚在 Stackoverflow 上发布的另一个问题有关:
Layout Constraint Conflicts in Default Today Widget

我将 Today Extension 作为目标添加到我的应用程序,删除了小部件 Root View 内的默认“Hello World”标签,并在其位置添加了一个普通的 UIView。我给 View 一个黄色并将其固定到 Root View 的所有边缘 - 与限制标签的方式相同。然后我向黄色 View 添加了另一个约束,以便为其提供 100 像素的固定高度。

Widget Storyboard

当我启动应用程序(在模拟器设备上测试)时,高度限制被简单地忽略并且黄色 View 一直占据整个可用空间下一个小部件的标题。

当我向上滑动通知中心并再次将其下拉时, View 突然跳转(似乎突然“看到”了它自己的高度限制),在小部件底部留下了 39px 的垂直空白区域:

First launch Subsequent launches

我认为底部的 39px 边距 是通过 defaultMarginInsets 参数传入的今日小部件的默认底部边距 widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) 方法,我可以通过覆盖此方法并提供我自己的边距插入来修复这种不一致的行为:

func widgetMarginInsetsForProposedMarginInsets(defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {
var newInsets = defaultMarginInsets
newInsets.bottom = 20
return newInsets
}

但是,我真的更喜欢使用系统提供的边距而不是固定值。在我看来,这是关于今日小部件的另一个 iOS 错误。是吗?如果没有:我该如何解决这个问题?

最佳答案

尽量避免使用别针。

对于定位,依靠将 View 与父 View 的前导、尾随、顶部或底部边缘对齐。

要调整大小,请尝试将您的 View 设置为与父 View 具有相同的高度或宽度。并根据需要调整乘数。

这解决了我在 Today Widget 中遇到的自动布局不一致问题。

更新了截图:

enter image description here

见上文,我使用的是对齐菜单(不是图钉菜单)。我选择了我试图约束的 View 以及所有封装的 super View ,并告诉先验共享(或者,对齐)尾部和底部边缘。

我知道这不是 Apple 展示它的方式,但这是一种解决方法,可以避免在 Today Widgets 中使用图钉时出现的错误。

更新 #2 - 这里是所有的约束条件(包括高度和宽度):

enter image description here

该错误必须与完全固定的 View 的推断大小有关,因为当我将 View 的高度和宽度设置为相对于其父 View (而不是推断)时,该错误不会发生。

关于ios - 不一致的今天小部件行为打破了 subview 的高度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37010292/

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