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

ios - 基本自动布局 - 嵌套宽度和动态高度

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

简单的目标,但它演示了自动布局让我头疼的情况。我想要一个 256pt 宽度的堆栈 View 和一个 基于布局的动态高度(我不应该手动指定高度)。 里面应该是一个64pt x 64pt的 ImageView ,它也应该水平居中,并且距离 super View 的顶部有8pt。请注意, ImageView 不是唯一的 subview ,因此堆栈 View 的高度必须动态调整大小。

Auto Layout 现在告诉我堆栈 View 的 256pt 宽度约束和图像的 64pt 宽度约束之间存在冲突,以及一些神秘的“leading = Image.leading”和“trailing = Image.trailing”冲突我什至无法删除也找不到。

我是否遗漏了有关自动布局的内容?我希望所有逻辑都包含在界面构建器中,因此不需要任何代码。

运行 Xcode 9.1

Layout image



Best Answer-推荐答案


没有什么好混淆的。 iOS清楚地告诉你这个问题。

StackViews 根据子组件的大小(这称为隐式大小)获取大小,除非它被手动覆盖,如您的情况是 256pt。

因为stackView只是水平或垂直堆叠的多个childView的容器,现在因为你只添加了一个imageView,它添加了leadingtrailing约束这绝对有意义,因为您将单个 View 添加到 View 堆栈中,现在 stackView 应该做什么?将 childView(在您的情况下为 imageView)拉伸(stretch)到自己的大小。

但是你没有允许它,因为你现在向 imageView 添加了宽度约束,当它试图增加 imageView 的宽度时,imageView 的约束不会允许它。

因此它提示有太多冲突的约束。就是这样

some mysterious "leading = Image.leading" and "trailing = Image.trailing" conflict which I can't even delete nor find.

你不能删除它们,因为 imageView 是 stackView 中唯一的 View 。因为只有一个 subview 要堆叠,stackView 将从左侧(前导)开始到右侧(尾随)。因为现在 stackView 有自己的宽度,它试图改变 imageView 的宽度以反射(reflect)相同!但是图像宽度限制阻止了它的发生。

您想通过添加到 stackView 的 imageView 来实现什么。如果stackView中只有一个view,添加stackView没有任何意义。重新考虑你在做什么。

最后,当stackview中只有一个childView时,添加水平居中没有任何意义(无论stackView垂直/水平)。

关于ios - 基本自动布局 - 嵌套宽度和动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328741/

回复

使用道具 举报

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

本版积分规则

关注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