如何在方向更改时调整多个标签的大小以自动适应 UIView 内部

Posted

技术标签:

【中文标题】如何在方向更改时调整多个标签的大小以自动适应 UIView 内部【英文标题】:How to resize multiple labels to automatically fit inside of a UIView When Orientation Changes 【发布时间】:2014-05-02 03:02:41 【问题描述】:

我已经尝试让它工作好几天了,我确信这是由于我对 AutoLayout 的真正工作原理缺乏了解。

我有一个UIViewViewController 为中心。然后我在 UIView 里面有 9 个 UILabels。我正在创建一个倒计时应用程序,每个UILabel 将保留剩余的月、日、小时、分钟或秒。我想这样当手机旋转到横向模式时,UILabels 会自动调整大小并使字体更大,因为landscape 模式下的空间比portrait 下的空间大。

我一直遇到的问题是,如果我将UILabel 框架设置为portrait 模式下的文本大小,那么当手机旋转时它不会调整大小。但是,如果我使UILabel 框架足够大以在手机旋转时容纳字体,那么文本实际上会自动调整大小。但是,我的问题是,如果我必须使用 landscape 大小的框架,我无法在 portrait 模式下排列所有内容。

非常感谢任何有关我应该如何处理此问题或最佳方法的帮助。

哦,我还应该补充一点,我不想一直使用单个标签来显示,因为我将在时间值下方放置标签,说明时间所代表的单位(小时、天、分钟、等),除非我为每个时间单位使用单独的UILabels,否则我将无法让下面的这些标签与正确的值对齐。

【问题讨论】:

【参考方案1】:

如果您使用自动布局,则不应设置任何框架。将标签约束赋予 UIView 的左右边缘,并将 UIView 约束赋予其父视图的左右边缘。当你旋转时,一切都应该扩大以填满更大的空间。将 IB 中的字体设置为横向所需的大尺寸(确保您的标签足够高以适应该尺寸),并将“自动缩小”菜单从“固定字体大小”更改为“最小字体大小”,这应该自动处理字体变化。

【讨论】:

有没有办法让子视图中的所有时间标签均匀分布? @Dmitry,是的,一种方法是在每个标签之间以及视图的顶部和底部与最近的标签之间添加间隔视图。这些间隔视图可以只是其中没有文本的 UILabel。您需要使用垂直约束从上到下挂钩所有标签,并将所有间隔标签设置为具有相同(但不固定)的高度。 好的,我现在正在尝试所有这些。我仍然不明白的另一件事是,如果我有一个包含时间标签的子视图并且我在该子视图中有 5 个时间标签,我是否不必在每个标签之间设置约束?对于子视图内的 UILabel,只有两个接触到边缘。最左边的人接触左边缘,最右边的人接触右边缘。如果我只为它们设置约束,那么当我旋转时,只有这些标签保持在原位。 @Dmitry,我不知道您的标签设置是什么样的,所以我无法对此发表评论。在垂直方向上,所有标签(包括垫片)都需要相互限制,但在水平方向上,如果不了解您的设置,我就不能说。 这是我目前的设置postimg.org/image/kt3qtewzn 我还尝试在每个标签之间添加冒号 (:),但这使得将它们全部对齐变得更加困难。我有你提到的限制,这就是它现在所做的s29.postimg.org/snil3epvn/…s29.postimg.org/ga5qwi077/…

以上是关于如何在方向更改时调整多个标签的大小以自动适应 UIView 内部的主要内容,如果未能解决你的问题,请参考以下文章

语言更改时调整表单大小

React Native Image 不会在设备(iOS)方向更改时调整大小?

CollectionView 标头不会在自动旋转时调整大小

Twitter Bootstrap:导航栏未在方向更改时调整大小(仅适用于 Android 的股票浏览器)

以编程方式创建的 UILabel 未在旋转时调整大小

在方向更改时调整 ConstraintLayout