Swift UIView 小部件自动布局不起作用

Posted

技术标签:

【中文标题】Swift UIView 小部件自动布局不起作用【英文标题】:Swift UIView widget autolayout not working 【发布时间】:2015-11-21 23:57:49 【问题描述】:

我有一个 UIView“小部件”(通过单独的 XIB 文件和 UIView 的相应 Swift 子类创建),它被插入到主情节提要中,以便可以轻松地重复使用。但是,添加到小部件 (XIB) 的自动布局约束不起作用。

这是小部件的外观:

这个想法是 3 个指标 (UILabels) 通过小部件均匀分布。一些关键约束包括:

将第二个和第三个指标与第一个指标垂直对齐 确保第二个指标在超级视图中水平居中 确保第一个指标是距左边缘的特定距离 确保第三个指标是与右边缘的特定距离

等等……

但是,当我运行该应用程序时,在将小部件插入主情节提要后,似乎没有施加此类约束。第三个指标永远不会出现,第二个指标没有水平居中。只是为了确认一下,我在 UIView 周围添加了红色边框,这样我就可以看到整个小部件。整个小部件显示在超级视图中,只是指标未按预期正确对齐。

知道为什么会这样吗?我正在考虑的一种替代方法是将指标直接放在主情节提要视图上,但我宁愿不这样做,以便我可以重用视图/代码...

更新:

正如@Peyman 所问,这里有一个更清晰的约束版本。我已将标签更改为左/中/右,以便更轻松地将约束与 XIB 中的实际 UI 元素相关联:

【问题讨论】:

以更清晰的方式向我们展示您的布局约束。可能是您的约束设置不正确 @Peyman - 我已经用实际约束更新了描述。这是你要找的吗? 【参考方案1】:

我终于找到了原因——看起来小部件的 self.view 没有填充小部件的整个边界,出于某种原因(我不太了解视图层次结构,所以我确定有人否则可以更好地解释这一点)。但是解决方法基本上就是在UIView的init函数中多加一行代码:

self.view.frame = self.bounds;

【讨论】:

以上是关于Swift UIView 小部件自动布局不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用固定大小的子视图和自动布局调整 UIView 的大小不起作用

pyqtgraph 交叉小部件绘图不起作用?

使用自动布局调整同级视图的大小时,使用子视图重新定位 UIView 不起作用

颤振布局问题:堆栈 z 顺序不起作用

VS Code 和 Flutter/Dart,小部件自动完成功能不起作用

自动布局:缩放填充不起作用