iPhone - Adjust UILabel width according to the text

后端 未结 7 1544
天涯浪人
天涯浪人 2020-12-28 08:17

How can I adjust the label Width according to the text? If text length is small I want the label width small...If text length is small I want the label width according to th

相关标签:
7条回答
  • 2020-12-28 08:42

    Function sizeWithFont: is deprecated in iOS 7.0, so you have to use sizeWithAttributes: for iOS 7.0+. Also to suport older versions, this code below can be used:

        CGFloat width;
        if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0)
        {
            width = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0 ]].width;
        }
        else
        {
            width = ceil([text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]}].width);
        }
    

    Using function ceil() on result of sizeWithAttributes: is recommended by Apple documentation:

    "This method returns fractional sizes; to use a returned size to size views, you must raise its value to the nearest higher integer using the ceil function."

    sizeWithAttributes

    0 讨论(0)
  • 2020-12-28 08:42
        // In swift 2.0
        let lblDescription = UILabel(frame: CGRectMake(0, 0, 200, 20))
        lblDescription.numberOfLines = 0
        lblDescription.text = "Sample text to show its whatever may be"
        lblDescription.sizeToFit()
    
        // Its automatically Adjust the height
    
    0 讨论(0)
  • just use to if you using constrain in your view or xib or cell

    [LBl sizeToFit];
    

    if its not working then

    dispatch_async(dispatch_get_main_queue(), ^{
    [LBl sizeToFit];
    });
    
    0 讨论(0)
  • 2020-12-28 08:43
    //use this for custom font
    CGFloat width =  [label.text sizeWithFont:[UIFont fontWithName:@"ChaparralPro-Bold" size:40 ]].width;
    
    //use this for system font 
    CGFloat width =  [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width;
    
    label.frame = CGRectMake(point.x, point.y, width,height);
    
    //point.x, point.y -> origin for label;
    //height -> your label height; 
    
    0 讨论(0)
  • 2020-12-28 08:53

    Try these options,

    UIFont *myFont = [UIFont boldSystemFontOfSize:15.0];
    // Get the width of a string ...
    CGSize size = [@"Some string here" sizeWithFont:myFont];
    
    // Get the width of a string when wrapping within a particular width
    NSString *mystring = @"some strings some string some strings...";
    CGSize size = [mystring sizeWithFont:myFont
                                  forWidth:150.0
                    lineBreakMode:UILineBreakModeWordWrap];
    

    You can also try with [label sizeToFit]; Using this method, you can set frame of two labels as,

    [firstLabel sizeToFit];
    [secondLabel sizeToFit];
    secondLabel.frame = CGRectMake(CGRectGetMaxX(firstLabel.frame), secondLabel.origin.y, secondLabel.frame.size.width, secondLabel.frame.size.height);
    
    0 讨论(0)
  • 2020-12-28 09:02

    Try the following:

    /* Consider these two labels as the labels that you use, 
    and that these labels have been initialized */
    
    UILabel* firstLabel;
    UILabel* secondLabel;
    
    CGSize labelSize = [firstLabel.text sizeWithFont:[UIFont systemFontOfSize:12]]; 
    //change the font size, or font as per your requirements
    
    CGRect firstLabelRect = firstLabel.frame;
    
    firstLabelRect.size.width = labelSize.width; 
    //You will get the width as per the text in label
    
    firstLabel.frame = firstLabelRect;
    
    
    /* Now, let's change the frame for the second label */
    CGRect secondLabelRect;
    
    CGFloat x = firstLabelRect.origin.x;
    CGFloat y = firstLabelRect.origin.y;
    
    x = x + labelSize.width + 20; //There are some changes here.
    
    secondLabelRect = secondLabel.frame;
    secondLabelRect.origin.x = x;
    secondLabelRect.origin.y = y; 
    
    secondLabel.frame = secondLabelRect;
    
    0 讨论(0)
提交回复
热议问题