UILabel垂直对齐

Rod*_*kes 11 uilabel ios swift

在我的应用程序中,我正在使用ActiveLabelfram Github.

在这种情况下,我的标签不会显示UILabel中间的文本.如果我使用普通的UILabel它可以正常工作,但是当它设置为ActiveLabel时,它会像这样. 在此输入图像描述

(图像在运行时拍摄)

我认为这是以某种方式使用对齐的代码:

/// add line break mode
private func addLineBreak(attrString: NSAttributedString) -> NSMutableAttributedString {
    let mutAttrString = NSMutableAttributedString(attributedString: attrString)

    var range = NSRange(location: 0, length: 0)
    var attributes = mutAttrString.attributesAtIndex(0, effectiveRange: &range)

    let paragraphStyle = attributes[NSParagraphStyleAttributeName] as? NSMutableParagraphStyle ?? NSMutableParagraphStyle()
    paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
    if let lineSpacing = lineSpacing {
        paragraphStyle.lineSpacing = CGFloat(lineSpacing)
    }

    attributes[NSParagraphStyleAttributeName] = paragraphStyle
    mutAttrString.setAttributes(attributes, range: range)

    return mutAttrString
}
Run Code Online (Sandbox Code Playgroud)

ActiveLabel.swift

ActiveType.swift

任何想法如何我可以在中间这样做: 在此输入图像描述

(图片取自故事板)

War*_*shi 4

将方法ActiveLabel.swift替换为drawTextInRect

public override func drawTextInRect(rect: CGRect) {
        let range = NSRange(location: 0, length: textStorage.length)

        textContainer.size = rect.size

        let usedRect = layoutManager.usedRectForTextContainer(textContainer)

        let glyphOriginY = (rect.height > usedRect.height) ? rect.origin.y + (rect.height - usedRect.height) / 2 : rect.origin.y
        let glyphOrigin = CGPointMake(rect.origin.x, glyphOriginY)

        layoutManager.drawBackgroundForGlyphRange(range, atPoint: glyphOrigin)
        layoutManager.drawGlyphsForGlyphRange(range, atPoint: glyphOrigin)
    }
Run Code Online (Sandbox Code Playgroud)

我还在https://github.com/rishi420/ActiveLabel.swift下分叉了该存储库

如果您下载了存储库,请记住设置verticalTextAlignmentCentertrue