swift中自定义Label的文字范围

某些时候,我们需要调整文字的显示范围(比如使用Label自定义提示语)已更美观的时候,最简单的方法就是继承UIlabel后重写UILable的相关方法;这里写swift的实现版本,OC的实现类似
首先我们需要一个新建的UIEdgeInsets属性,以及重新构造init方法

var edgesInset : UIEdgeInsets?
    
    override init(frame: CGRect) {
        super.init(frame: frame);
        self.edgesInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
        
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.edgesInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    

接着重写他的rect范围

    override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
        var rect = super.textRect(forBounds: UIEdgeInsetsInsetRect(bounds, self.edgesInset!), limitedToNumberOfLines: numberOfLines)
        rect.origin.x = rect.origin.x - (self.edgesInset?.left)!
        rect.origin.y = rect.origin.y - (self.edgesInset?.top)!
        rect.size.width = rect.size.width + (self.edgesInset?.left)! + (self.edgesInset?.right)!
        rect.size.height = rect.size.height + (self.edgesInset?.top)! + (self.edgesInset?.bottom)!

        return rect
        
    }

最后自然是重绘文字的显示范围

override func drawText(in rect: CGRect) {
        super.drawText(in: UIEdgeInsetsInsetRect(rect, self.edgesInset!))
    }

ok,这就搞定了,之所以重新定制Label的文字范围,是因为要写一个通用的提示,依托于snp就可以很轻易的实现,而不需要去引入第三方库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,066评论 25 709
  • 1 柠檬和石头认识完全是机缘巧合。 那天是5月2号,520宿舍刚刚从考试的战役中解放出来,几个女孩子决定一起去下个...
    薄荷1994阅读 4,862评论 0 1
  • 初识薛之谦是在去年,他发了一张叫做绅士的专辑。之前当然和很多人一样,只知道认真的雪。 听完绅士之后,我就彻底沦陷了...
    永远爱你的宝阅读 3,218评论 6 2
  • 今天室友来找我,说想跟我聊聊。我说好啊。 其实我们平时聊天不怎么多,偶尔一起上课或者开开玩笑。今天突然一本正经要跟...
    晚风中Sharon阅读 2,047评论 4 3

友情链接更多精彩内容