Set Up Multiple Colors and Fonts in a Single Label Swift - Swift 4 Tutorials W3Schools

Hot

Post Top Ad

14 Nov 2017

Set Up Multiple Colors and Fonts in a Single Label Swift

In this article we learn setting up different colors in one label using NSAttributedString.

Label has text property and attributedText property.

Here we are going to use attributedText property for customization.

Set Up Multiple Colors and Fonts in a Single Label Swift
Add the following code:

override func viewDidLoad() {
    super.viewDidLoad()
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.textAlignment = .center
    view.addSubview(label)
    label.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    label.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.98).isActive = true
    label.heightAnchor.constraint(equalTo: label.widthAnchor, multiplier: 1).isActive = true
    
    let normalString = "BLUE  RED  GREEN  PURPLE  YELLOW"
    
    let attributedText = NSMutableAttributedString(string: normalString)
    
    attributedText.addAttributes([NSAttributedStringKey.foregroundColor: UIColor.blue, NSAttributedStringKey.font: UIFont(name: "AvenirNext-Bold", size: 15)!], range: getRangeOfSubString(subString: "BLUE", fromString: normalString)) // Blue color attribute
    
    attributedText.addAttributes([NSAttributedStringKey.foregroundColor: UIColor.red, NSAttributedStringKey.font: UIFont(name: "Baskerville-BoldItalic", size: 27)!], range: getRangeOfSubString(subString: "RED", fromString: normalString)) // RED color attribute
    
    attributedText.addAttributes([NSAttributedStringKey.foregroundColor: UIColor.green, NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: 19)!], range: getRangeOfSubString(subString: "GREEN", fromString: normalString)) // GREEN color attribute
    
    attributedText.addAttributes([NSAttributedStringKey.foregroundColor: UIColor.purple, NSAttributedStringKey.font: UIFont(name: "DINCondensed-Bold", size: 13)!], range: getRangeOfSubString(subString: "PURPLE", fromString: normalString)) // PURPLE color attribute
    
    attributedText.addAttributes([NSAttributedStringKey.foregroundColor: UIColor.yellow, NSAttributedStringKey.font: UIFont(name: "Futura-CondensedExtraBold", size: 24)!], range: getRangeOfSubString(subString: "YELLOW", fromString: normalString)) // YELLOW color attribute
    
    label.attributedText = attributedText
}

func getRangeOfSubString(subString: String, fromString: String) -> NSRange {
    let sampleLinkRange = fromString.range(of: subString)!
    let startPos = fromString.distance(from: fromString.startIndex, to: sampleLinkRange.lowerBound)
    let endPos = fromString.distance(from: fromString.startIndex, to: sampleLinkRange.upperBound)
    let linkRange = NSMakeRange(startPos, endPos - startPos)
    return linkRange
}

In above code we are setting attribute color and font attributes for each word using NSRange.

Download sample project with example :

No comments:

Post a Comment

Post Top Ad