EdgeInsetLabel 支持文字缩进的Label

开发时,经常出现Label需要文字缩进的情况。

比如一个label需要圆角,文字居中,带颜色的背景,左右两边需要留出距离,这样出来的效果才好看。如下图

EdgeInsetLabel,可以轻松实现文字缩进的效果。并且支持在storyboard和xib中直接配置,直接显示出最终效果。

//
//  EdgeInsetLabel.swift
//
//  Created by pilgrim on 2017/4/27.
//

import UIKit

/// - 版本
///   - V1.0.0  --  2017-8-7  --  创建代码
///   - V1.0.1  --  2018-3-6  --  优化代码注释,支持jazzy自动生成文档
///   - V1.0.2  --  2021-3-4  --  可视化支持,textInsets可以在storyboard和xib中配置。

/// - 功能说明
///   - 支持文字缩进的Label
@IBDesignable public class EdgeInsetLabel: UILabel {

    // MARK: - 成员变量

    /// 文字缩进配置项
    public var textInsets: UIEdgeInsets = UIEdgeInsets.zero
    
    /// 上侧 缩进
    @IBInspectable private var topInset: CGFloat {
        set {
            textInsets.top = newValue
        }
        
        get {
            return textInsets.top
        }
    }
    
    /// 左侧 缩进
    @IBInspectable private var leftInset: CGFloat {
        set {
            textInsets.left = newValue
        }
        
        get {
            return textInsets.left
        }
    }
    
    /// 下侧 缩进
    @IBInspectable private var bottomInset: CGFloat {
        set {
            textInsets.bottom = newValue
        }
        
        get {
            return textInsets.bottom
        }
    }
    
    /// 右侧 缩进
    @IBInspectable private var rightInset: CGFloat {
        set {
            textInsets.right = newValue
        }
        
        get {
            return textInsets.right
        }
    }

    
    // MARK: - Public Functions

    /// 重写的系统方法,请勿调用
    override public func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
        var rect = super.textRect(forBounds: bounds.inset(by: textInsets), limitedToNumberOfLines: numberOfLines)
        rect.origin.x -= textInsets.left
        rect.origin.y -= textInsets.top
        rect.size.width += textInsets.left + textInsets.right
        rect.size.height += textInsets.top + textInsets.bottom
        return rect
    }

    /// 重写的系统方法,请勿调用
    override public func drawText(in rect: CGRect) {
        super.drawText(in: rect.inset(by: textInsets))
    }
}

纯代码的使用方式很简单,生成EdgeInsetLabel,然后设置label.textInsets即可。示例如下

/// 标题
    private lazy var titleLabel: EdgeInsetLabel = {
        let label = EdgeInsetLabel()
        label.textColor = .black
        label.font = UIFont.systemFont(ofSize: 12, weight: .medium)
        label.textInsets = UIEdgeInsets(top: 0, left: 9.0, bottom: 0, right: 9.0)
        return label
    }()

如果需要在xib或storyboard中配置,示例如下:

轻松搞定!配置缩进时,xib和storyboard中展示的视图也会实时更新哦!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值