2

I'm trying to set the text with CATextLayer and UILabel.

Same Font, Size and Bounds but WordWrapping result is different.

UILabel Result

CATextLayer Result

Here is my code.

 let textHeaderAttributes = [
            NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 24), // font
            NSAttributedStringKey.foregroundColor: UIColor.white,           // text color
//            NSAttributedStringKey.backgroundColor: UIColor.black
        ]



let textHeader = NSAttributedString(string: "A classic, meaningful, functional gift", attributes: textHeaderAttributes )

 //CATextLayer
    let frontHeaderText = CATextLayer()

  frontHeaderText.string = textHeader
        frontHeaderText.contentsScale = UIScreen.main.scale
        frontHeaderText.isWrapped = true
        frontHeaderText.alignmentMode = kCAAlignmentLeft
        frontHeaderText.frame = CGRect(x: 16, y: 381, width: screenSize.width - 16, height: frontHeaderTextHeight[0])
        frontLayer.addSublayer(frontHeaderText)


    //UILabel
    let rearHeaderText = UILabel()
   rearHeaderText.attributedText = textHeader
        rearHeaderText.textAlignment = .left
        rearHeaderText.lineBreakMode = NSLineBreakMode.byWordWrapping
        rearHeaderText.numberOfLines = 0
        rearHeaderText.frame = CGRect(x: 16, y: 381, width: screenSize.width - 16, height: frontHeaderTextHeight[0])
        rearLayer.addSubview(rearHeaderText)

//Calculate label's height func getLabelHeight(text:String, font:UIFont, lineNumber:Int) -> CGFloat{

    let label = UILabel()

    label.frame = CGRect(x: 0, y: 0, width: screenSize.width - 32, height: 100)
    label.text = text
    label.font = font
    label.textAlignment = NSTextAlignment.left
    label.numberOfLines = lineNumber;

    label.sizeToFit()

    return label.frame.height

}
Shawn Baek
  • 1,928
  • 3
  • 20
  • 34

0 Answers0