使用带有lineSpacing的AttributedText的多行UILabel正在iphone 6+&上添加不需要的偏移量。 7+

时间:2017-01-04 19:33:22

标签: ios autolayout uilabel uistackview

我有一个带有属性文本的UILabel,其中包含特定的lineSpacing或lineHeightMultiple。

let titleParagraphStyle = NSMutableParagraphStyle()
//titleParagraphStyle.lineSpacing = lineSpacing
titleParagraphStyle.lineHeightMultiple = 1.5
titleParagraphStyle.alignment = .left

let titleAttributes = [NSForegroundColorAttributeName: color,
                                   NSFontAttributeName: UIFont(name: fontName, size: fontSize)!,
                                   NSParagraphStyleAttributeName : titleParagraphStyle] as [String : Any]

let titleAttrString = NSAttributedString(string:string, attributes: titleAttributes)

var label = BetterUILabel() 
label.numberOfLines = 0       
label.attributedText = titleAttrString
label.setNeedsLayout() //I'm trying everything
label.layoutIfNeeded()
label.sizeToFit()

BetterUILabel是UILabel的子类,修复了perferredMaxLayoutWidth

class BetterUILabel: UILabel {

    override public func layoutSubviews(){
        super.layoutSubviews()
        self.preferredMaxLayoutWidth = self.bounds.width
        super.layoutSubviews()
    }

    override public var bounds: CGRect
        {
        didSet
        {
            self.preferredMaxLayoutWidth = self.bounds.width
        }
    }

    override public var frame: CGRect
        {
        didSet
        {
            self.preferredMaxLayoutWidth = self.frame.width
        }
    }

}

label是uiView的子视图,是UIStackView内垂直UIScrollView的排列视图。

标签固定在其超视图的顶部,左侧和右侧。它依靠它的内在内容大小来驱动它的高度。如果我从样式中移除任何lineSpacinglineHeightMultiple或使用常规的非属性文本,则会很好地调整大小。但是,有了这些属性,它有时会切断6+和7+设备的最后一行。

我夸大了行间距以显示问题。

UILabel使用橙色背景正在处理6: enter image description here

在6+上,绿色背景,UILabel顶部似乎有垂直空间,导致文本被截断: enter image description here

是什么导致这种情况。这个问题有解决方法吗?

0 个答案:

没有答案