【发布时间】: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 与自动布局一起工作的最简单方法。在测试时,我刚刚选择了所有元素并设置了“添加缺少的约束”,但这也对我没有帮助。
-
如果我选择我的动态标签正下方的下一个元素并设置“添加缺失的约束”,结果是我的动态标签只会调整它自己的高度,直到它到达它下面的元素,这意味着它不会重叠它,但它也不会推动它。它只会调整它自己的高度,直到它到达另一个元素,而不是限制它自己的内容。就像元素阻止标签进一步调整它自己的高度一样。
标签: ios objective-c xcode uilabel autolayout