【Swift】UILabel 設置內邊距


 

前言

  對應一個曾經開發 Android 的人來說,沒有這些基礎屬性簡直令人發指,還是表噴這個,認真寫代碼 - - #

 

聲明
  歡迎轉載,但請保留文章原始出處:)
  博客園:http://www.cnblogs.com
  農民伯伯: http://over140.cnblogs.com

 

正文

class UILabelPadding : UILabel {
    
    private var padding = UIEdgeInsetsZero
    
    @IBInspectable
    var paddingLeft: CGFloat {
        get { return padding.left }
        set { padding.left = newValue }
    }
    
    @IBInspectable
    var paddingRight: CGFloat {
        get { return padding.right }
        set { padding.right = newValue }
    }
    
    @IBInspectable
    var paddingTop: CGFloat {
        get { return padding.top }
        set { padding.top = newValue }
    }
    
    @IBInspectable
    var paddingBottom: CGFloat {
        get { return padding.bottom }
        set { padding.bottom = newValue }
    }
    
    override func drawTextInRect(rect: CGRect) {
        super.drawTextInRect(UIEdgeInsetsInsetRect(rect, padding))
    }

    override func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
        let insets = self.padding
        var rect = super.textRectForBounds(UIEdgeInsetsInsetRect(bounds, insets), limitedToNumberOfLines: numberOfLines)
        rect.origin.x    -= insets.left
        rect.origin.y    -= insets.top
        rect.size.width  += (insets.left + insets.right)
        rect.size.height += (insets.top + insets.bottom)
        return rect
    }

}

 

  代碼說明:

    通過 IBInspectable 可以支持 UILable 在 Storyboard 里面就能指定內邊距,非常方便:

    

 

  參考

    參考這篇文章 http://stackoverflow.com/questions/21167226/resizing-a-uilabel-to-accomodate-insets 改的,注意這篇文章 http://stackoverflow.com/questions/3476646/uilabel-text-margin 有問題。

 

結束

  抱歉命名用的 Android 的,然后超愛 IBInspectable 這個東西。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM