UIlabel长度自适应

来源:互联网 发布:淘宝c店的运营方案 编辑:程序博客网 时间:2024/05/22 14:16


http://code4app.com/requirement/51a5a0756803fa0017000000

UIlabel长度自适应

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,0,0)];//这个frame是初设的,没关系,后面还会重新设置其size。
[label setNumberOfLines:0];
NSString *s = @"abcdefghijklmn";
UIFont *font = [UIFont fontWithName:@"Arial" size:12];
CGSize size = CGSizeMake(320,2000);
CGSize labelsize = [s sizeWithFont:font constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];
[label setFrame:CGRectMake(0,0, labelsize.width, labelsize.height)];
[self.view addSubView:label];
以上是网上摘抄的 但有个问题如果是英文就会出现显示不全的现象 如何能解决? 求教

丧德拉 | 1038 次查看 | 2 个回答 | 2013-05-29 14:30
共有 2 个回答
  • 墨半成霜
    2013-05-29 15:45:50
    回复
    你好 这么蛋疼的问题

    - 你写了一个font size是12 然后用他来计算 这个字符串在12字号情况下的大小 给了label做frame 但是你没有 label setFont:font
    所以label的font 还是默认的systemFont:17 (这是默认值)

    17字号 的字 放在 12字号的frame 里面 你说他能显示完吗?

    -其次 你这里numberOflines是0 当一排320宽度显示不够的时候 他得换行 也会出现省略号
    这里你如果英文字母 都没有空格 并且要换行 0要改大一点 并且lineBreakMode:UILineBreakModeWordWrap得改为lineBreakMode:UILineBreakModeCharactorWrap

    意思就是换行的时候 以字符来切割 而不是以单词来切割(区别:英文的一个word 可以包含N个charator 以空格区分,但是中文的一个word就是一个charactor)
    有用1没用0
  • Code4appDev
    2013-06-07 17:32:30
    回复
    Try to call this function after you have set the Label "width", "font" and "text":

    -(void)resizeLabel:(UILabel *)aLabel
    {
    aLabel.lineBreakMode = UILineBreakModeWordWrap;
    aLabel.numberOfLines = 9999;

    CGSize aSize = [aLabel.text sizeWithFont:aLabel.font constrainedToSize:CGSizeMake(aLabel.frame.size.width, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];

    aLabel.frame = CGRectMake(aLabel.frame.origin.x, aLabel.frame.origin.y, aSize.width, aSize.height+20.0f);
    }