【问题标题】:Dynamic UILabel not working in iOS8动态 UILabel 在 iOS8 中不起作用
【发布时间】:2014-11-17 12:58:36
【问题描述】:

我有一个可以接受可变长度字符串的 UILabel。标签应该扩展以接受它给出的任何长度的字符串。我在 iOS7 中有这个工作,但在 iOS8 中,标签是单行的,当文本太长时,文本会被截断。行数设置为 0。这是我在 iOS7 中工作的代码:

- (IBAction)btnClicked:(id)sender {

    [_theLabel setText:[_txtLabel text]];

    CGSize constrainedSize = CGSizeMake(_theLabel.frame.size.width, 9999);
    NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:17.0], NSFontAttributeName, nil];
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:[_txtLabel text] attributes:attributesDict];
    CGRect requireHeight = [string boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

    if(requireHeight.size.width > _theLabel.frame.size.width){
        requireHeight = CGRectMake(0, 0, _theLabel.frame.size.width, requireHeight.size.height);
    }

    CGRect newFrame = _theLabel.frame;
    newFrame.size.height = requireHeight.size.height;
    [self.theLabel setFrame:newFrame];
}

对于 iOS8 的变化有什么建议吗?谢谢!

【问题讨论】:

  • 使用自动布局,无需任何代码即可实现。设置框架后你有没有尝试调用[label setNeedsLayout]

标签: ios objective-c uilabel


【解决方案1】:

我通常是这样做动态UILabel高度的:

-(UILabel*)setupTitleLabelWithFrame:(CGRect)frame
{
    UILabel *lbl_title = [[UILabel alloc] initWithFrame:frame];

    lbl_title.textAlignment = NSTextAlignmentLeft;
    lbl_title.numberOfLines = 0;

    lbl_title.text = title;

    CGSize maximumLabelSize = CGSizeMake(lbl_title.frame.size.width, 9999);
    CGSize expectedSize = [lbl_title sizeThatFits:maximumLabelSize];
    lbl_title.frame = CGRectMake(lbl_title.frame.origin.x, lbl_title.frame.origin.y, lbl_title.frame.size.width, expectedSize.height);

    return lbl_title;
}

【讨论】:

  • 感谢您的帖子,但是,此代码仅适用于 iOS7 或更低版本。在 iOS8 中,标签为一行,文本被截断。
  • 我在iOS8中使用这个代码,没有遇到任何问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2014-10-23
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多