2013-04-06 2 views
1

Я пытаюсь изменить высоту uilabel динамически по мере изменения ширины текста, но возникает проблема, когда я пытаюсь использовать эту строку «белый залив». В основном он вычисляет ширину, которая находится в 2-х линий в UILabel, но когда он показывает в двух строках она выглядит следующим образом:динамическая высота 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)))]; 

На самом деле после того, как «белый» есть пространство и «wallington» не находятся в этой строке, поэтому он переходит на новую строку, но не отображает полный текст.

Как мне его показать?

+0

добавить код для справки – NANNAV

ответ

3
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

1

Надежда ниже код может работать

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

здесь ширина или высота один должен быть закреплен ..

5

Попробуйте ....

//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; 
+0

Отлично работает, очень чистое решение. –

+0

спасибо @ Chirag..и работает. –

0
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) 

} 
Смежные вопросы