UILabel 对齐并将一个视图移动到不同大小类中的另一个视图

Posted

技术标签:

【中文标题】UILabel 对齐并将一个视图移动到不同大小类中的另一个视图【英文标题】:UILabel alignment and moving one view to other view in different Size Classes 【发布时间】:2015-10-27 03:56:54 【问题描述】:

总结

我正在当前项目中制作收据屏幕,该屏幕可以纵向和横向查看。我已经完成了纵向约束,它看起来像这样:

。现在,在景观中应该是这样的:

问题

(1) 纵向时,A1-A3 居中对齐,横向时应左对齐(A1-A3 的值是动态的,可以是长文本或短文本)。那么,我可以添加一个约束以编程方式将对齐方式从中心向左放置,还是有其他方法可以做到这一点?

(2) 注意横向视图 A、B、C 的 parentView 变为一个,这可行吗? UIImageView 必须放在 View B 下方

我的尝试

(1) 在使用 IB 的不同大小等级中,只有系统字体系列和大小可以改变,如果 UILabel 居中对齐,它将在所有大小等级中居中

(2) 将 UIImageView 从视图 B 移动到视图 C 时出现错误。似乎如果将一个视图移动到另一个视图,它将在所有尺寸类中永久移动

【问题讨论】:

真的很简单,检查你的故事板下面的wAny,hAny,选择仅与纵向或仅横向相关的值,然后为它们创建不同的约束,它甚至可以应用于ipad屏幕 您可以使用Size Classes 来设置差异约束。您可能还想查看UIStackView,它在 xcode 7 中更易于布局控件。 感谢您的评论。我已经在我的肖像(使用 wAny、hAny)和横向(使用 wAny、hCompact)中使用了它。 UILabel 对齐方式的变化以及 UIImageView 从 View B 到 View C 的移动确实是我的问题。 对于 UIImageView,您可以创建 2x 副本,在横向和纵向上,您可以通过 .hidden 显示和隐藏彼此,对于 UIlabel,如果它的文本对齐,您还必须为其使用代码, 故事板大小类仅用于放置项目,不更改其属性 【参考方案1】:

对于标签对齐方式,您必须在代码中对其进行更新。您可以通过在视图控制器或自定义视图上实现 traitCollectionDidChange: 来检测尺寸类何时发生变化。

对于图像,一种方法是将图像视图设为 B 或 C 的子视图。相反,将其设为根视图的子视图,但使用约束将其置于 B 和 C 之上.示例:

注意文档大纲中的 Image 不是 Green 的子视图;它是根视图的子视图。由于 Image 在子视图列表中排在最后,因此它比其他视图“位于”或“靠近屏幕”。

图像已为 wAny/hAny 安装了约束,以便使用 Image.centerY = Green.centerY 和 Image.trailing = Green.trailing - 20 定位它。

现在是 wAny/hCompact 尺寸类:

现在没有安装将图像置于绿色的约束。相反,我为 wAny/hCompact 安装了设置 Image.centerX = Blue.centerX 和 Image.top = Blue.top + 20 的约束。

这是 iPhone 4s 模拟器中的演示:

【讨论】:

感谢 Rob 提供的非常翔实的回答,如果我没有遇到任何问题,我会试试这个并接受您的回答 :)

以上是关于UILabel 对齐并将一个视图移动到不同大小类中的另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

使用 Autolayout 将 UILabel 沿其父视图的底部对齐

自动布局动画保持 UILabel 居中

iOS:如果我将 UILabel 添加到 UIView,视图是不是具有标签的固有内容大小?

在不停止 stackView 自动调整大小的情况下对齐图像视图

在使用视图 iOS 滚动 uilabel 时保持标签文本与屏幕中心对齐?

UISlider 和 UILabel 导致无限循环