你如何添加插入到UILabel(iOS Swift)?

and*_*lee 17 ios swift

我是一名学习iOS的Android开发人员.如何在iOS Swift中向UILabel添加填充(插入)?我没有成功找到一个简单的教程.谢谢.

另外,如何在Swift中为UI元素添加边距?当我尝试下面的内容时,没有任何内容得到更新(点击"添加约束").

在此输入图像描述

And*_*kas 39

这是您需要在Swift 3中添加的代码:

class InsetLabel: UILabel {
    let topInset = CGFloat(0)
    let bottomInset = CGFloat(0)
    let leftInset = CGFloat(20)
    let rightInset = CGFloat(20)

    override func drawText(in rect: CGRect) {
        let insets: UIEdgeInsets = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
        super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
    }

    override public var intrinsicContentSize: CGSize {
        var intrinsicSuperViewContentSize = super.intrinsicContentSize
        intrinsicSuperViewContentSize.height += topInset + bottomInset
        intrinsicSuperViewContentSize.width += leftInset + rightInset
        return intrinsicSuperViewContentSize
    }
}
Run Code Online (Sandbox Code Playgroud)


Seb*_*ddd 22

可能最好的想法是像这样子类化UILabel和覆盖drawTextInRect::

class InsetLabel: UILabel {
    override func drawTextInRect(rect: CGRect) {
        super.drawTextInRect(UIEdgeInsetsInsetRect(rect, UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)))
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 现在文本被切断了。它被截断。@Sebyddd (2认同)

小智 9

需要添加这个:

class InsetLabel: UILabel {
let topInset = CGFloat(12.0), bottomInset = CGFloat(12.0), leftInset = CGFloat(12.0), rightInset = CGFloat(12.0)

override func drawTextInRect(rect: CGRect) {
    let insets: UIEdgeInsets = UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
    super.drawTextInRect(UIEdgeInsetsInsetRect(rect, insets))
}

override func intrinsicContentSize() -> CGSize {
    var intrinsicSuperViewContentSize = super.intrinsicContentSize()
    intrinsicSuperViewContentSize.height += topInset + bottomInset
    intrinsicSuperViewContentSize.width += leftInset + rightInset
    return intrinsicSuperViewContentSize
}
}
Run Code Online (Sandbox Code Playgroud)