在我的申请中,我使用ActiveLabel
fram 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
}
(图片取自故事板)
答案 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,因为您看起来我选择了第二个对齐标签中间的含义