【问题标题】:dynamic height uilabel动态高度 uilabel
【发布时间】:2013-04-06 06:40:44
【问题描述】:

我正在尝试随着文本宽度的变化动态更改 uilabel 高度,但是当我尝试使用“white wallington hall”这一行时出现问题。基本上它会计算 uilabel 中两行的宽度,但是当它显示为两行时,它看起来像这样:

"white   
 wallington h..."

示例代码:

 UILabel* lbl_Property = [[UILabel alloc]init];
   [lbl_Property setFont:[UIFont fontWithName:@"Arial" size:10]];
   [lbl_Property setNumberOfLines:0];
   [lbl_Property setText:[arr_SubDetail objectAtIndex:x]];
   UIFont* font = [UIFont fontWithName:@"Arial" size:10];
   CGSize stringSize = [lbl_Property.text sizeWithFont:font];
   CGFloat width = stringSize.width;


   [lbl_Property setFrame:CGRectMake(lbl_Property.frame.origin.x, lbl_Property.frame.origin.y, lbl_Property.frame.size.width,5+lbl_Property.frame.size.height*(ceilf(width/110)))];

实际上在“white”之后有一个空格,而“wallington”不在该行中,所以它换了一个新行,但它没有显示完整的文本

如何让它正确显示?

【问题讨论】:

  • 添加您的代码以供参考

标签: ios uilabel


【解决方案1】:

试试看……

//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                    constrainedToSize:maximumLabelSize 
                    lineBreakMode:yourLabel.lineBreakMode]; 

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;

【讨论】:

  • 效果很好,非常干净的解决方案。
【解决方案2】:
 int h=10;    
 UILabel *lbl_headitem = [[UILabel alloc]initWithFrame:CGRectMake(3,h, 690, size_txt_overview1.height)];// See the 'h' value
 lbl_headitem.text = [headItemArray objectAtIndex:k];
 [lbl_headitem setTextAlignment:UITextAlignmentLeft];
 [lbl_headitem setBackgroundColor:[UIColor clearColor]];
 [lbl_headitem setTag:k];
 lbl_headitem.numberOfLines=0;  
 [lbl_headitem setTextColor:[UIColor redColor]];
 [lbl_headitem setFont:[UIFont fontWithName:@"Helvetica" size:18]];
 [scrollAttributes addSubview:lbl_headitem];
 h = h + size_txt_overview1.height;

确保您的 label.numberOfLines 设置为 0

【讨论】:

    【解决方案3】:

    希望下面的代码可以工作

    CGSize size = [str sizeWithFont:lbl.font constrainedToSize:CGSizeMake(204.0, 10000.0) lineBreakMode:lbl.lineBreakMode];
    

    这里的宽度或高度必须是固定的..

    【讨论】:

      【解决方案4】:
      func makeSizeSender(name:UILabel){
      
          let attributes = [NSFontAttributeName : name.font]
          let rect = name.text!.boundingRectWithSize(CGSizeMake(frame.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes, context: nil)
          name.frame = CGRectMake(contentView.frame.origin.x+30, 0, 200, rect.height+30);
          self.addSubview(name)
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        相关资源
        最近更新 更多