UILabel 垂直对齐

UILabel vertical alignment

在我的应用程序中,我使用 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
}

ActiveLabel.swift

ActiveType.swift

有什么想法可以像这样把它放在中间:

(图片取自Storyboard)

您可以像这样在代码中设置textAlignment: showLab.textAlignment = NSTextAlignmentCenter;

或者您也可以使用 Storyboard 或 xib 来查看实验室中发生的情况,StoryBoard,如您所见,我选择对齐的第二个,这意味着在标签中居中

看看这个post:

Programmatically Add CenterX/CenterY Constraints

好吧,问题是当您已经从 IB 中拖出一个标签,然后您试图改变它的位置时。代码会中断。 您需要以编程方式制作标签,然后将其设置到中心。

说真的,@Alex 是正确的。 AutoLayout 解决了很多问题。

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)
    }

我也在 https://github.com/rishi420/ActiveLabel.swift

下分叉了回购协议

如果下载repo,记得设置verticalTextAlignmentCentertrue