How to adjust a label size to fit the length of the text

前端 未结 8 730
无人及你
无人及你 2020-12-20 12:27

I have searched the solution to this in the past QAs, but could not find the right one.
Does anyone know how to adjust aUILabel size dynamically to fit the

8条回答
  •  一生所求
    2020-12-20 12:30

    Use This Extended UILabel class:

    //
    //  UILabelExtended.h
    
    //
    //  Created by Prateek on 6/18/11.
    
    
    
    #import 
    
    /*  **********************************************************************************************
            This class inherit the class UILabel and extend the features of UILabel. 
        ********************************************************************************************** */
    @interface UILabelExtended : UILabel {
       __unsafe_unretained id  customDelegate;
        id  objectInfo;
        SEL selector;
    }
    
    @property (nonatomic,assign) SEL selector;;
    @property (nonatomic,assign) id  customDelegate;
    @property (nonatomic,retain) id  objectInfo;
    @end
    
    @interface UILabel(UILabelCategory)
    - (void)setHeightOfLabel;
    - (void)setWidthOfLabel;
    - (void)setHeightOfLabelWithMaxHeight:(float)maxHeight;
    - (void)setWidthOfLabelWithMaxWidth:(float)maxWidth ;
    @end
    

    UILabelExtended.m

    //
    //  Created by Prateek on 6/18/11.
    
    //
    
    #import "UILabelExtended.h"
    
    
    @implementation UILabelExtended
    @synthesize selector,customDelegate, objectInfo;
    
    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        if(self.selector)
            if([self.customDelegate respondsToSelector:self.selector]) {
                [self.customDelegate performSelector:self.selector withObject:self];
                return;
            }
    }
    
    - (void)dealloc {
    
        self.customDelegate = nil;
        self.selector = NULL;
        self.objectInfo = nil;
    }
    @end
    
    
    @implementation UILabel(UILabelCategory)
    
    - (void)setHeightOfLabel {
        UILabel* label = self;
    
        //get the height of label content
        CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
        //set the frame according to calculated height
        CGRect frame = label.frame;
        if([label.text length] > 0) {
    
            frame.size.height = height;
        } 
        else {
            frame.size.height = 0;
        }
        label.frame = frame;
    }
    
    
    - (void)setWidthOfLabel {
        UILabel* label = self;
    
            //get the height of label content
        CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
            //set the frame according to calculated height
        CGRect frame = label.frame;
        if([label.text length] > 0) {
    
            frame.size.width = width+5;
        } 
        else {
            frame.size.width = 0;
        }
        label.frame = frame;
    }
    
    - (void)setHeightOfLabelWithMaxHeight:(float)maxHeight {
        UILabel* label = self;
    
        //get the height of label content
        CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height;
        //set the frame according to calculated height
        CGRect frame = label.frame;
    
        if([label.text length] > 0) {
            if (height > maxHeight) {
                frame.size.height = maxHeight;
            }
            else {
                frame.size.height = height;
            }
    
        } 
        else {
            frame.size.height = 0;
        }
        label.frame = frame;
    }
    
    - (void)setWidthOfLabelWithMaxWidth:(float)maxWidth  {
        UILabel* label = self;
    
        //get the height of label content
        CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
        //set the frame according to calculated height
        CGRect frame = label.frame;
        if([label.text length] > 0) {
    
            if (width > maxWidth) {
                frame.size.width = maxWidth;
            }
            else {
                frame.size.width = width;
            }
        } 
        else {
            frame.size.width = 0;
        }
        label.frame = frame;
    }
    @end
    

    Use Methods: 1) set text of UILabel 2) [yourLBLObj setHeightOfLabel]; or [yourLBLObj setWidthOfLabel]; It will automatically set Height or Width according to text.

提交回复
热议问题