• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:11:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这个问题与我刚刚在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap