web-dev-qa-db-fra.com

centrage du texte dans un UILabel avec un NSAttributedString

En passant par quelques améliorations de base à une application sur laquelle je travaille. Encore nouveau sur la scène de développement iOS Swift. J'ai pensé que les lignes de texte dans mon code seraient automatiquement centrées parce que je mettais l'étiquette au centre. Après un peu de recherche, j'ai découvert que c'était pas le cas. Comment aligner un code comme celui-ci au centre:

let atrString = try NSAttributedString(
   data: assetDetails!.cardDescription.dataUsingEncoding(NSUTF8StringEncoding)!, 
   options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], 
   documentAttributes: nil)
assetDescription.attributedText = atrString
26
cruelty

Vous devez créer un style de paragraphe spécifiant l'alignement au centre et définir ce style de paragraphe comme attribut sur votre texte. Exemple de terrain de jeu:

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

Résultat:

centered text in label

Puisque vous analysez un document HTML pour créer votre chaîne attribuée, vous devrez ajouter l'attribut après sa création, comme ceci:

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

Mise à jour pour Swift 4

Dans Swift 4, les noms d'attribut sont désormais de type NSAttributeStringKey et les noms d'attribut standard sont des membres statiques de ce type. Vous pouvez donc ajouter l'attribut comme ceci:

richText.addAttribute(.paragraphStyle, value: style, range: NSMakeRange(0, richText.length))
73
rob mayoff

Dans Swift 4.1:

let style = NSMutableParagraphStyle()

style.alignment = NSTextAlignment.center

lbl.centerAttributedText = NSAttributedString(string: "Total Balance",attributes: [.paragraphStyle: style])

(édité pour le bloc de code)