如何使动态高度 UILabel 将其他元素推开?
Posted
技术标签:
【中文标题】如何使动态高度 UILabel 将其他元素推开?【英文标题】:How to make a dynamic height UILabel push other elements out of its way? 【发布时间】:2014-10-27 18:52:31 【问题描述】:所以我有一个 UILabel,它正在从数据库中获取动态数量的内容。 它获得的内容越多,标签相应的高度就越高。
为了这个效果,我使用了这个代码:
NSString *infoztext = [dataBase valueForKey:@"infos"];
infoz.text = infoztext;
CGSize maxSize = CGSizeMake(320, 410);
CGRect labrect = [infoztext boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@NSFontAttributeName:infoz.font context:Nil];
infoz.numberOfLines = 0;
infoz.frame = CGRectMake(23, 594, 274, labrect.size.height);
这就像一个魅力。标签将根据接收到的内容量调整其高度。
问题是我的标签与视图中位于其下方的所有元素重叠,而不是将它们推开。
我确实启用了自动布局,但除了重叠之外什么都没有发生。
如何让标签推送其他元素而不是重叠它们?
【问题讨论】:
要使自动布局起作用,您需要设置约束。您是否在任何地方设置了任何约束? (在 Interface Builder 或代码中) 我通常使用Interface Builder。我在 ScrollView 内的一个视图中拥有我的所有元素,例如标签和 UIImageViews。我在那里设置了约束。必须是使 ScrollView 与自动布局一起工作的最简单方法。在测试时,我刚刚选择了所有元素并设置了“添加缺少的约束”,但这也对我没有帮助。 如果我选择我的动态标签正下方的下一个元素并设置“添加缺失的约束”,结果是我的动态标签只会调整它自己的高度,直到它到达它下面的元素,这意味着它不会重叠它,但它也不会推动它。它只会调整它自己的高度,直到它到达另一个元素,而不是限制它自己的内容。就像元素阻止标签进一步调整它自己的高度一样。 【参考方案1】:在界面构建器中,您可以选择一个元素(在本例中为 UILabel 正下方的元素)并在该标签上设置约束。在屏幕右下角附近的界面生成器中,有 4 个图标,选择中间有正方形的那个。您可以选择正方形和顶部文本字段之间的红色 I 形。选择之后,单击“添加约束”,即使在调整 UILabel 的大小后,您的应用也应保持这两个元素之间的间距不变。
注意:您还必须对 UILabel 下的所有元素执行此操作,否则您将在屏幕下方遇到同样的问题。
编辑:底部的四个图标是“对齐”、“固定”、“解决自动布局问题”和“调整大小行为”。约束所需的图标是“Pin”图标。点击它,红色的 I 应该在弹出的小窗口顶部附近。
【讨论】:
谢谢。您可能正在谈论的四个图标(从左到右)“对齐”、“固定”、“解决自动布局问题”和“调整大小行为”。据我所知,中间既没有正方形,也没有红色。它们都是单色的。 您正在寻找“Pin”图标,点击它,您应该会在小狗窗口顶部附近看到红色的 I 形状。 感谢 Victor,这让我更进一步。让我总结一下这是如何完成的: 1) 选择一个元素,如标签 2) 单击“pin” 3) 在新的弹出窗口中,有一个正方形,在它的所有四个方向上都有 4x 文本字段。有微小的红色笔触。您必须实际单击它们才能“激活”相关文本字段中的值。如果您单击文本字段旁边的下拉箭头,您还可以选择哪个其他元素应该是测量点。但是让我告诉你......我在动态标签下有 20 个元素,*ss 让它们全部工作很痛苦:(以上是关于如何使动态高度 UILabel 将其他元素推开?的主要内容,如果未能解决你的问题,请参考以下文章
AutoLayout 在地图标注中动态调整 UILabel 高度和宽度?
如何使用自动布局将两个具有动态高度的 UILabel 与 UICollectionViewCell 的底部对齐
如何仅使用情节提要使 UILabel 的 UIView 超级视图适合 UILabel 的固有高度?
如何将 UIImage 设置为 UITableView Cell,它根据我在 UILabel 中输入的文本动态计算单元格高度?