Get the NSString height

前端 未结 2 694
眼角桃花
眼角桃花 2020-12-10 04:35

I have an NSString, and I want to know its height to create an appropriate UILabel.

Doing this

NSString *string = @\"this is an example\"; 
CGSize si         


        
相关标签:
2条回答
  • 2020-12-10 05:26

    The reason what you're doing doesn't work as you would expect is because

    – sizeWithFont:forWidth:lineBreakMode: 
    

    is for "Computing Metrics for a Single Line of Text" whereas

    -sizeWithFont:constrainedToSize:lineBreakMode:
    

    is for "Computing Metrics for Multiple Lines of Text". From the documentation:

    Computing Metrics for a Single Line of Text

    – sizeWithFont:
    – sizeWithFont:forWidth:lineBreakMode:
    – sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
    

    Computing Metrics for Multiple Lines of Text

    – sizeWithFont:constrainedToSize:
    – sizeWithFont:constrainedToSize:lineBreakMode:
    

    Try using -sizeWithFont:constrainedToSize:lineBreakMode: instead, e.g. this is what I usually do:

    CGSize maximumLabelSize = CGSizeMake(353,9999);
    
    CGSize expectedLabelSize = [string sizeWithFont:label.font                        
                                  constrainedToSize:maximumLabelSize 
                                      lineBreakMode:label.lineBreakMode]; 
    
    CGRect newFrame = label.frame;
    newFrame.size.height = expectedLabelSize.height;
    label.frame = newFrame;
    
    0 讨论(0)
  • 2020-12-10 05:29

    According to the Documentation

    This method returns the width and height of the string constrained to the specified width. Although it computes where line breaks would occur, this method does not actually wrap the text to additional lines. If the size of the string exceeds the given width, this method truncates the text (for layout purposes only) using the specified line break mode until it does conform to the maximum width; it then returns the size of the resulting truncated string.

    You should to use -[NSString sizeWithFont:constrainedToSize:lineBreakMode:] which has similar behavior but you can uuse CGFLOAT_MAX as the height in the size passed in.

    0 讨论(0)
提交回复
热议问题