OGeek|极客世界-中国程序员成长平台

标题: ios - 今天不一致的小部件行为打破了 subview 的高度限制 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 16:11
标题: ios - 今天不一致的小部件行为打破了 subview 的高度限制

这个问题与我刚刚在 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 错误。是吗?如果没有:我该如何解决这个问题?



Best Answer-推荐答案


尽量避免使用别针。

对于定位,依赖于将您的 View 与父 View 的前缘、后缘、顶部或底部边缘对齐。

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

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

更新了截图:

enter image description here

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

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

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

enter image description here

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

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






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4