Swift UILabel填充在多行时会出错

Swift UILabel填充在多行时会出错,swift,swift4,Swift,Swift4,我将UILabel子类化以添加顶部填充,它固定了标签的垂直位置 代码如下所示: 类PaddedUILabel:UILabel{ 变量topInset:CGFloat=0 var righinset:CGFloat=0 var bottomInset:CGFloat=0 var leftInset:CGFloat=0 公共函数规范化(顶部:CGFloat){ 顶部插图=顶部 drawText(in:CGRect(x:0,y:0,宽度:0,高度:0)) } 重写func drawText(在rec

我将UILabel子类化以添加顶部填充,它固定了标签的垂直位置

代码如下所示:

类PaddedUILabel:UILabel{
变量topInset:CGFloat=0
var righinset:CGFloat=0
var bottomInset:CGFloat=0
var leftInset:CGFloat=0
公共函数规范化(顶部:CGFloat){
顶部插图=顶部
drawText(in:CGRect(x:0,y:0,宽度:0,高度:0))
}
重写func drawText(在rect:CGRect中){
let inset:uiedgeinset=uiedgeinset(顶部:self.topInset,左侧:self.leftInset,底部:self.bottomInset,右侧:self.righinset)
self.setNeedsLayout()
返回super.drawText(in:rect.inset(by:insets))
}
}
我使用
label.normalize(顶部:3)

但是,当标签变为多行时,填充会出错(左)。它只有在我移除
标签时才被修复。normalize(顶部:3)

下面是我如何应用它的

class LocationsTableViewCell:UITableViewCell{
@IBOUTLE弱变流位置标签:PaddedUILabel!
重写func prepareForReuse()函数{
locationsLabel.text=nil
}
private let paragraphStyle:nsmutableparaphstyle={
let style=NSMutableParagraphStyle()
style.lineSpacing=5.0
style.alignment=.left
style.lineBreakMode=.byWordWrapping
返回样式
}()
func setupCell(uiModel:LocationsUIModel){
locationsLabel.numberOfLines=0
开关UIM模型{
案例。位置(文本):
//let longText=“另一个跨多行的长位置。位置123456789”
让onelineText=“海德公园”
让attrText=onelineText.set(fontStyle(UIFont.geomanistFont(of size:UIFont.smallSize))+colorStyle(.pepper))
//让attrText=text.set(fontStyle(UIFont.spFont(of size:UIFont.smallSize))+colorStyle(.pepper))
attrText.addAttribute(NSAttributedString.Key.paragraphStyle,值:paragraphStyle,范围:NSRange(位置:0,长度:attrText.length))
locationsLabel.AttributeText=attrText
//位置标签正常化(顶部:3)
违约:
打破
}
}
}

预期结果将显示所有3行,并且仍然保持单行的正确性

如果您希望文本居中,为什么不将
重力
设置为居中?@AngryDuck重力是什么意思?我认为@AngryDuck的意思是textAlignment属性@SebastianWeiß它更多的是垂直文本而不是水平文本对齐