使用NSAttributedString将文本居中在UILabel中

cru*_*lty 30 nsattributedstring uilabel ios swift

对我正在开发的应用程序进行一些基本改进.iOS快速开发领域仍然是新手.我想我的代码中的文本行会自动居中,因为我将标签设置为居中.经过一番研究后,我发现事实并非如此.我如何将这样的代码对齐到中心:

let atrString = try NSAttributedString(
   data: assetDetails!.cardDescription.dataUsingEncoding(NSUTF8StringEncoding)!, 
   options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], 
   documentAttributes: nil)
assetDescription.attributedText = atrString
Run Code Online (Sandbox Code Playgroud)

rob*_*off 78

您需要创建指定中心对齐的段落样式,并将该段落样式设置为文本的属性.示例游乐场:

import UIKit
import PlaygroundSupport

let style = NSMutableParagraphStyle()
style.alignment = NSTextAlignment.center

let richText = NSMutableAttributedString(string: "Going through some basic improvements to a application I am working on. Still new to the iOS swift development scene. I figured that the lines of text in my code would automatically be centered because I set the label to center.",
                                         attributes: [ NSParagraphStyleAttributeName: style ])
// In Swift 4, use `.paragraphStyle` instead of `NSParagraphStyleAttributeName`.

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 400))
label.backgroundColor = UIColor.white
label.attributedText = richText
label.numberOfLines = 0
PlaygroundPage.current.liveView = label
Run Code Online (Sandbox Code Playgroud)

结果:

标签中居中的文字

由于您正在解析HTML文档以创建属性字符串,因此您需要在创建后添加属性,如下所示:

let style = NSMutableParagraphStyle()
style.alignment = NSTextAlignment.center

let richText = try NSMutableAttributedString(
    data: assetDetails!.cardDescription.data(using: String.Encoding.utf8)!,
    options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType],
    documentAttributes: nil)
richText.addAttributes([ NSParagraphStyleAttributeName: style ],
                       range: NSMakeRange(0, richText.length))
// In Swift 4, use `.paragraphStyle` instead of `NSParagraphStyleAttributeName`.
assetDescription.attributedText = richText
Run Code Online (Sandbox Code Playgroud)

Swift 4的更新

在Swift 4中,属性名称现在是类型NSAttributeStringKey,标准属性名称是该类型的静态成员.所以你可以像这样添加属性:

richText.addAttribute(.paragraphStyle, value: style, range: NSMakeRange(0, richText.length))
Run Code Online (Sandbox Code Playgroud)


小智 7

在Swift 4.1中:

let style = NSMutableParagraphStyle()

style.alignment = NSTextAlignment.center

lbl.centerAttributedText = NSAttributedString(string: "Total Balance",attributes: [.paragraphStyle: style])
Run Code Online (Sandbox Code Playgroud)

(针对代码块进行了编辑)