我有一个屏幕布局,其中有两个可调整大小的标签,其中包含多行文字。这些标签放在其父视图中,实体将添加到主内容视图中,然后将主内容视图添加到scrollView(这就是大多数解决方案所建议的内容)。对于这两个标签(在附加的第一个图像中的约和时间和位置标签下面)我将高度约束设置为“大于或等于”并将numberOfLines设置为0以及调用SizetoFit,但实际输出不是预期的(见第二张图片)。没有约束警告。为所有元素提供了所有约束。
viewDidLoad中的代码如下所示为其中一个标签。
self.lblAbout.text = @"this is a long two three lines about string which will have two lines this is a long two three lines about string which will have two lines";
self.lblAbout.numberOfLines = 0;
[self.lblAbout sizeToFit];
[self.lblAbout setPreferredMaxLayoutWidth:244.0];
另外
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
scrollView.contentSize = contentView.frame.size;
}
如果需要任何其他约束,我不会在需要的地方添加所有前导,尾随,顶部,底部约束以及高度,并且所有视图之间的间距都已到位。 我想要的是标签应该调整到行数,并且contentView(父视图)应该在ScrollView内滚动,因为总高度将大于可用的屏幕。
***问题我认为标签的外部视图没有根据标签调整大小,因为下面的所有视图都没有重新定位****
答案 0 :(得分:1)
请尝试此解决方案,
1。将高度约束添加到Label的superView。
2。添加该约束的IBOutlet
3。添加此方法以查找文本的高度
你需要给出你的标签的超级视图的宽度,这样宽度将与你的超级视图相同
4。现在获取Height表单返回CGRect并将其分配给Constraints的常量。它应该像
heightConstraint.constant = youObject.size.height;
请确保您已相应添加其他约束。如果不是你需要也相应地增加其他超级视图的高度。
(CGRect)sizeOfDetailLabelFromString:(NSString*)string maxWidth:(CGFloat)maxWidth{
NSDictionary *attributes = @{NSFontAttributeName:FONT_LIGHT};
CGRect rect = [string boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:attributes context:nil];
return rect;
}
答案 1 :(得分:0)
这是最终有效的。