UIStackView 内的视图未使用 AutoLayout 调整大小

Posted

技术标签:

【中文标题】UIStackView 内的视图未使用 AutoLayout 调整大小【英文标题】:View inside UIStackView is not resizing with AutoLayout 【发布时间】:2016-08-28 19:17:09 【问题描述】:

我有以下屏幕:

所有视图都在UIStackView 内。黄色视图在运行时是圆形的。当我运行较小的 iPhone (5S) 时,我的问题是包含 yellow viewlight blue 视图不会变小,因此底部的 red and blue view 会缩小。我希望这两个和green view 具有固定宽度,light blue view 以适应高度。

但由于某种原因它没有。我敢肯定是因为我对yellow view 设置的约束。但我不知道是哪一个问题。

这里是yellow view 约束:

其他视图的约束是:

    绿色视图:高度 = 64 红蓝视图:高度 = 50

非常感谢有人能花一些时间查看这些限制并帮助我了解如何在屏幕更改时使浅蓝色(和黄色)改变高度。

【问题讨论】:

【参考方案1】:

您是否尝试将浅蓝色和黄色视图的内容压缩阻力优先级(垂直)降低到低于 750,并将绿色、红色和蓝色视图的内容压缩阻力优先级(垂直)降低到高于 750 (如果是这样的话,甚至可能需要 1000 / ?)

更新

我看了你的项目。实际上,问题似乎根本不在于您的堆栈视图、约束或DailyStatusViewController。相反,这个问题看起来与MainViewController 更相关,它将每日状态视图嵌入到滚动视图中。滚动视图既剪裁到边界,又被放置在另一个容器视图后面。如果您在滚动视图上关闭剪辑到边界,并将其下方的容器视图移动到其后面,您将看到您的堆栈视图布局正确,但只是被剪辑了。

至于它们被剪裁的原因,请记住,您的堆栈视图的高度限制为 300,而嵌入它的滚动视图的高度限制为屏幕高度的 45%。因此,在较小的屏幕上,可用于显示每日状态视图的点不到 300 个,因此被剪裁了。您可能希望从外部堆栈视图中删除固定高度约束,而是将其约束到根视图的边缘。

【讨论】:

是的,我忘了说我已经这样做了,没有任何效果。 @Kobe 嗯……你有没有机会发布一个指向你的项目的链接,或者只有那个屏幕的示例项目? 它是用 Swift 3 制作的,这样可以吗? 项目我已经添加到这里了,有空可以看看:github.com/adrianstanciu24/stack-view-test.git @Kobe 我想我找到了你的问题:更新了我的答案

以上是关于UIStackView 内的视图未使用 AutoLayout 调整大小的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 未显示在 UIStackView 中

UIStackView的使用-赵鹏举

UIStackView的使用-赵鹏举

UIScrollView 内的 UIStackView 与动态变化的项目

UIScrollView 内的水平 UIStackView 不滚动

在 StackView 内动态添加 ViewControllers - UIScrollView 内的 UIStackView