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,并向他们的存储库发出请求。他们可以合并我的提交,或者重构代码以改进这些特性。我认为人们无论如何都会在下一个版本中获得这些特性。