iosswiftnsmutableattributedstringcatextlayer

NSMutableAttributedString paragraphStyle not applying


I've added an NSMutableAttributedString to a CATextLayer. All of the attributes are applying except for the paragraphStyle. Any thoughts as to why?

Thanks for the help.

func createTextLayer() {
    let textLayer = CATextLayer()
    textLayer.frame = CGRect(x: view.center.x - 150, y: view.frame.size.height / 2, width: 300, height: 300)

    let layerText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor arcu quis velit congue dictum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor arcu quis velit congue dictum."

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.firstLineHeadIndent = 10
    paragraphStyle.headIndent = 10
    paragraphStyle.tailIndent = 10
    paragraphStyle.minimumLineHeight = 38
    paragraphStyle.alignment = .center

    let textAttributes: [NSAttributedStringKey : Any] = [
        .font: UIFont(name: "HelveticaNeue-Bold", size: 18)!,
        .foregroundColor: UIColor.white,
        .backgroundColor: UIColor.black,
        .baselineOffset: 10,
        .paragraphStyle: paragraphStyle
        ]

    textLayer.string = NSMutableAttributedString(string: layerText, attributes: textAttributes)
    textLayer.backgroundColor = UIColor.clear.cgColor
    textLayer.isWrapped = true
    textLayer.contentsScale = UIScreen.main.scale
    textView.layer.addSublayer(textLayer)
}

Solution

  • AFAIK CATextLayer doesn't respect any paragraph style. You need a UITextView to display text with a paragraph style.

    Edit:

    And I guess you want

    paragraphStyle.tailIndent = -10
    

    Negative values means distance from the trailing margin.