Ios UILabel垂直对齐

Ios UILabel垂直对齐,ios,swift,uilabel,Ios,Swift,Uilabel,在我的应用程序中,我使用的是ActiveLabelfram 在这种情况下,我的标签没有显示UILABER中间的文本。如果我使用一个普通的UILabel,它可以正常工作,但是当我将它设置为ActiveLabel时,它会变成这样。 (图像是在运行时拍摄的) 我认为这是以某种方式处理对齐的代码: /// add line break mode private func addLineBreak(attrString: NSAttributedString) -> NSMutableAttrib

在我的应用程序中,我使用的是
ActiveLabel
fram

在这种情况下,我的标签没有显示UILABER中间的文本。如果我使用一个普通的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
}

任何想法,我怎么能在中间这样做:


(图像取自故事板)

您可以在代码中设置文本对齐方式,如下所示: showLab.textAlignment=NSTextAlignmentCenter


或者,您也可以使用故事板或xib来查看实验室中发生的情况,当您查看时,我选择第二个对齐方式,即标签中的中间部分

问题是当你已经从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)
    }
我还根据


如果下载了repo,请记住在脚本中将
verticaltextallignmentcenter
设置为
true

向父视图添加垂直和水平约束。还要确保在任意/任意情节提要中执行此操作view@Alex-我的应用程序中没有使用自动布局。啊,很公平,我可以问一下为什么吗?它解决了很多麻烦,而不是手动创建constraints@Alex-自从我开始使用xCode以来,我从未使用过自动布局。我发现不用它要容易得多,而且我从来没有遇到过这样的问题:)祝你好运,先生,我建议你研究一下自动布局。我曾经手动定义我的约束,但自从我研究了自动布局之后,我真的改进了我的工作流程,尽管每个都有自己的!!天哪,你是上帝!:)使用ActiveLabel的另一个问题是,最小字体大小不起作用,如果字符串中有许多单词,则字体大小不会改变。你能把它也修好吗?我希望整个文本适合UILabel(活动标签),并调整字体大小以适合UILabel。编辑:我尝试在
private func setupLabel()中的
userInteractionEnabled=true
上添加
minimumScaleFactor=1
adjustsFontSizeToFitWidth=true
但那没用。@RoduckNickes:)关于你的第二个问题,forked repo更新了。从分叉回购协议下载。使用
minFontSize
。存储库中有很多改进的空间。任何人都可以随意贡献。太棒了!一个问题-如果ActiveLabel的创建者更新了它,我再次运行“pod安装”,会发生什么。
VerticalTextAlignment
minFontSize
会被删除吗?我想它们会被删除。我已将此问题链接共享给
ActiveLabel
collaborators,并向他们的存储库发出请求。他们可以合并我的提交,或者重构代码以改进这些特性。我认为人们无论如何都会在下一个版本中获得这些特性。