iphone中的UILabel文本对齐问题?
Posted
技术标签:
【中文标题】iphone中的UILabel文本对齐问题?【英文标题】:UILabel text alignment issues in iphone? 【发布时间】:2014-01-31 04:37:57 【问题描述】:我正在从服务器获取 JSON 响应并将该内容设置为 UILabel
,有时文本将是一行,有时文本将是 10 行。所以我在 UIScrollView
内显示此 UILabel
。但我在UILabel
得到了空白空间
这是我的截图..
目前我正在使用故事板和自动布局
所以我想避免UILabel
中的这些空白空间。请给我这个对齐问题的建议。??
更改UILabel
高度的代码,但这对我不起作用
CGRect textRect = [strDetailsFinal boundingRectWithSize:CGSizeMake(296, FLT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@NSFontAttributeName: labDetails.font
context:nil];
CGSize size = textRect.size;
CGRect newFrame = labDetails.frame;
newFrame.size.height = size.height;
labDetails.frame = CGRectMake(160, 200, 300, newFrame.size.height);
【问题讨论】:
是的,你最好计算文本的高度或宽度,然后根据 Json 的文本设置标签的框架,这样你就可以完成任务 @kamaleshkumaryadav 是的,我刚刚编辑了我的问题并发布了一行代码用于动态更改 uilabel 高度。但这对我不起作用:( @Kalai - 记住一个拇指规则 - 使用自动布局时不应该设置框架 - 你违背了自动布局的基本概念 - 而是尝试在你的情况下以编程方式自动布局约束 @bhavyakothari ok 提供一些示例编码,用于在自动布局开启时将框架设置为 uilabel 【参考方案1】:希望对你有帮助
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
【讨论】:
您的编码仅适用于自动布局禁用..但目前我正在使用自动布局。【参考方案2】:使用[labDetails sizeToFit]
。如果您有尺寸限制,请使用[sizeThatFits:CGSizeMake(WidthConstraint, HeightConstraint)]
,然后使用其结果来设置您的标签框架。
【讨论】:
【参考方案3】:为什么不使用UIButton
而不是UILabel
。 UIButton
具有垂直对齐文本的属性,而 UILabel
没有。
将UIButton
与userInteractionEnabled = NO
一起使用。在这里查看我的回复:Vertically align UILabel
【讨论】:
【参考方案4】:记住一个拇指规则 - 使用自动布局时不应该设置框架 - 你违背了自动布局的基本概念 - 在你的情况下尝试以编程方式自动布局约束
-(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];
【讨论】:
【参考方案5】:你已经使用了一个固定大小的 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
【讨论】:
【参考方案6】:使用上标签框的原点和大小,并基于此设置您的详细标签框,使用标签的 sizeToFit 属性。
假设582
,618
是你的标题标签,
喜欢,
labDetails.frame=CGRectMake(5, title.frame.origin.x+title.frame.size.height+5, 300, 100);
[labDetails sizeToFit];
【讨论】:
以上是关于iphone中的UILabel文本对齐问题?的主要内容,如果未能解决你的问题,请参考以下文章
在旋转时更改 UITableViewCell 中的文本对齐方式
如何在 iPhone 应用程序中实现 UIButton / UILabel 'padding'