UILabel垂直对齐

时间:2015-12-16 01:14:26

标签: ios swift uilabel

在我的申请中,我使用ActiveLabel fram Github

在这种情况下,我的标签不显示UILabel中间的文本。如果我使用普通的UILabel它可以正常工作,但是当它设置为ActiveLabel时,它会像这样。 enter image description here

(图像在运行时拍摄)

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

/// 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

任何想法我怎么能在中间这样做: enter image description here

(图片取自故事板)

3 个答案:

答案 0 :(得分: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)
    }

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

下分发了回购

如果您下载了回购,请务必将verticalTextAlignmentCenter设置为true

答案 1 :(得分:0)

看一下这篇文章:

Programmatically Add CenterX/CenterY Constraints

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

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

答案 2 :(得分:-1)

您可以在代码中设置textAlignment,如下所示:     showLab.textAlignment = NSTextAlignmentCenter;

或者您也可以使用Storyboard或xib来查看实验室中发生的事情StoryBoard,因为您看起来我选择了第二个对齐标签中间的含义