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 而不是UILabelUIButton 具有垂直对齐文本的属性,而 UILabel 没有。

UIButtonuserInteractionEnabled = 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 中的文本对齐方式

UILabel 文本对齐不起作用(Swift 4)

如何在 iPhone 应用程序中实现 UIButton / UILabel 'padding'

如何从底部对齐 UILabel 文本?

如何从 iPhone 中的子视图更新超级视图 UILabel 文本?

在 UILabel 中将文本垂直对齐到顶部