你的子类看起来不完整的。如文档中提到的,你应该重写这两种方法:
public func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect
public func drawTextInRect(rect: CGRect)
下面是一个示例实现,应该工作:
@IBDesignable class AttributedLabel : UILabel
{
@IBInspectable var padding: CGFloat = 0 {
didSet {
self.textInsets = UIEdgeInsets(top: self.padding, left: self.padding, bottom: self.padding, right: self.padding)
}
}
var textInsets = UIEdgeInsetsZero {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect
{
var insets = self.textInsets
let insetRect = UIEdgeInsetsInsetRect(bounds, insets)
let textRect = super.textRectForBounds(insetRect, limitedToNumberOfLines: numberOfLines)
insets = UIEdgeInsets(top: -insets.top, left: -insets.left, bottom: -insets.bottom, right: -insets.right)
return UIEdgeInsetsInsetRect(textRect, insets)
}
override func drawTextInRect(rect: CGRect) {
super.drawTextInRect(UIEdgeInsetsInsetRect(rect, self.textInsets))
}
}
您将无法在Interface Builder现场渲染它虽然。