美文网首页
iOS给UILabel增加内边距

iOS给UILabel增加内边距

作者: XueYongWei | 来源:发表于2017-02-15 16:33 被阅读950次

    UILabel默认不带内边距,调整内边距步骤:

    1.制定一个空白区:UIEdgeInsets。

    2. 重写drawTextInRect,传入空白区。

    3.重新计算扩大label的frame(空白区占用frame的空间,导致显示不全)。

    代码:

    #import "SFLabel.h"
    #import <UIKit/UIKit.h>
    @interface SFLabel ()
    // 用来决定上下左右内边距,也可以提供一个借口供外部修改,在这里就先固定写死
    @property (assign, nonatomic) UIEdgeInsets edgeInsets;
    @end
    
    @implementation SFLabel
    
    
    //下面三个方法用来初始化edgeInsets
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if(self = [super initWithFrame:frame])
        {
            self.edgeInsets = UIEdgeInsetsMake(25, 0, 25, 0);
        }
        return self;
    }
    
    - (instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super initWithCoder:aDecoder]) {
            self.edgeInsets = UIEdgeInsetsMake(25, 0, 25, 0);
        }
        return self;
    }
    
    - (void)awakeFromNib
    {
       [super awakeFromNib];
        self.edgeInsets = UIEdgeInsetsMake(25, 0, 25, 0);
    }
    
    // 修改绘制文字的区域,edgeInsets增加bounds
    -(CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
    {
    
        /*
        调用父类该方法
        注意传入的UIEdgeInsetsInsetRect(bounds, self.edgeInsets),bounds是真正的绘图区域
        */
        CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds,
         self.edgeInsets) limitedToNumberOfLines:numberOfLines];
        //根据edgeInsets,修改绘制文字的bounds
        rect.origin.x -= self.edgeInsets.left;
        rect.origin.y -= self.edgeInsets.top;
        rect.size.width += self.edgeInsets.left + self.edgeInsets.right;
        rect.size.height += self.edgeInsets.top + self.edgeInsets.bottom;
        return rect;
    }
    
    //绘制文字
    - (void)drawTextInRect:(CGRect)rect
    {
        //令绘制区域为原始区域,增加的内边距区域不绘制
        [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.edgeInsets)];
    }
    @end
    

    相关文章

      网友评论

          本文标题:iOS给UILabel增加内边距

          本文链接:https://www.haomeiwen.com/subject/phvqwttx.html