我从服务器获取JSON响应,并将该内容设置为UILabel
,有时文本将是一行,有时文本将是10行。所以我在{{内部显示UILabel
1}}。但是我在UIScrollView
这是我的截图..
目前我正在使用故事板和自动布局
所以我想在UILabel
中避免这些空白空间。请给我这个对齐问题的建议。??
更改UILabel
身高的代码,但这对我不起作用
UILabel
答案 0 :(得分:2)
这可以帮助你
NSDictionary *attributesDic= [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"FontName" size:15], NSFontAttributeName,nil];
CGRect frame = [label.text boundingRectWithSize:CGSizeMake(263, 2000.0)
options:NSStringDrawingUsesLineFragmentOrigin attributes:attributesDic context:nil];
CGSize size = frame.size;
及其可能的答案Dynamically resize label in iOS 7或您可以尝试此https://gist.github.com/danielphillips/1005520
答案 1 :(得分:2)
使用[labDetails sizeToFit]
。如果您有尺寸限制,请使用[sizeThatFits:CGSizeMake(WidthConstraint, HeightConstraint)]
,然后使用其结果设置标签框。
答案 2 :(得分:2)
为什么不使用UIButton
代替UILabel
。 UIButton
具有垂直对齐文字的属性,而UILabel
则没有。
将UIButton
与userInteractionEnabled = NO
一起使用。在这里查看我的回复:Vertically align UILabel
答案 3 :(得分:2)
记住一个拇指规则 - 在使用自动布局时不应设置框架 - 您将违反Autolayout基本概念 - 而是尝试在您的情况下以编程方式自动布局约束
-(void)awakeFromNib{
[super awakeFromNib];
for(NSLayoutConstraint *cellConstraint in self.constraints){
[self removeConstraint:cellConstraint];
id firstItem = cellConstraint.firstItem == self ? self.contentView : cellConstraint.firstItem;
id seccondItem = cellConstraint.secondItem == self ? self.contentView : cellConstraint.secondItem;
NSLayoutConstraint* contentViewConstraint =
[NSLayoutConstraint constraintWithItem:firstItem
attribute:cellConstraint.firstAttribute
relatedBy:cellConstraint.relation
toItem:seccondItem
attribute:cellConstraint.secondAttribute
multiplier:cellConstraint.multiplier
constant:cellConstraint.constant];
[self.contentView addConstraint:contentViewConstraint];
}
}
答案 4 :(得分:2)
你已经修改了UILable大小而不必使用动态大小UILable。
在此之前,您需要计算文本/字符串的大小
#define FONT_SIZE 15.0f
#define LABEL_CONTENT_WIDTH 320.0f
#define LABEL_CONTENT_MARGIN 10.0f
NSString *text = @"YOUR TEXT HERE";
CGSize constraint = CGSizeMake(LABEL_CONTENT_WIDTH - (LABEL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping];
CGFloat height = MAX(size.height, 44.0f);
计算尺寸后,将它们应用到您的标签上,如下所示
[labDetails setFrame:CGRectMake(labDetails.frame.origin.x, labDetails.frame.origin.y, labDetails.frame.size.width, MAX(height, 44.0f))];
如果您使用的是自动布局选项,请点击此处:Link
答案 5 :(得分:1)
使用上标签框的原点和大小,并根据设置的详细标签框架,使用标签的 sizeToFit 属性。
假设582
,618
是您的标题标签,
像,
labDetails.frame=CGRectMake(5, title.frame.origin.x+title.frame.size.height+5, 300, 100);
[labDetails sizeToFit];