Adjust UILabel height depending on the text

前端 未结 30 2311
走了就别回头了
走了就别回头了 2020-11-22 03:53

Consider I have the following text in a UILabel (a long line of dynamic text):

Since the alien army vastly outnumbers the team, players m

30条回答
  •  傲寒
    傲寒 (楼主)
    2020-11-22 04:23

    Solution to iOS7 prior and iOS7 above

    //
    //  UILabel+DynamicHeight.m
    //  For StackOverFlow
    //
    //  Created by Vijay on 24/02/14.
    //  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
    //
    
    #import 
    
    #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
    
    #define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
    
    #define iOS7_0 @"7.0"
    
    @interface UILabel (DynamicHeight)
    
    /*====================================================================*/
    
    /* Calculate the size,bounds,frame of the Multi line Label */
    
    /*====================================================================*/
    /**
     *  Returns the size of the Label
     *
     *  @param aLabel To be used to calculte the height
     *
     *  @return size of the Label
     */
    
    -(CGSize)sizeOfMultiLineLabel;
    
    @end
    
    
    //
    //  UILabel+DynamicHeight.m
    //  For StackOverFlow
    //
    //  Created by Vijay on 24/02/14.
    //  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
    //
    
    #import "UILabel+DynamicHeight.h"
    
    @implementation UILabel (DynamicHeight)
    /*====================================================================*/
    
    /* Calculate the size,bounds,frame of the Multi line Label */
    
    /*====================================================================*/
    /**
     *  Returns the size of the Label
     *
     *  @param aLabel To be used to calculte the height
     *
     *  @return size of the Label
     */
    -(CGSize)sizeOfMultiLineLabel{
    
        NSAssert(self, @"UILabel was nil");
    
        //Label text
        NSString *aLabelTextString = [self text];
    
        //Label font
        UIFont *aLabelFont = [self font];
    
        //Width of the Label
        CGFloat aLabelSizeWidth = self.frame.size.width;
    
    
        if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
            //version < 7.0
    
            return [aLabelTextString sizeWithFont:aLabelFont
                                constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                    lineBreakMode:NSLineBreakByWordWrapping];
        }
        else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
            //version >= 7.0
    
            //Return the calculated size of the Label
            return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{
                                                            NSFontAttributeName : aLabelFont
                                                            }
                                                  context:nil].size;
    
        }
    
        return [self bounds].size;
    
    }
    
    @end
    

提交回复
热议问题