How to Control Line Spacing in UILabel

How to Control Line Spacing in UILabel

28 February 2025 Stephan Petzl Leave a comment Xcode

Managing line spacing in a UILabel is a common requirement when dealing with multi-line text in iOS applications. While setting the frame, font size, and number of lines is straightforward, adjusting the gap between lines requires a bit more finesse. Below, we explore several methods to achieve this, focusing on practical solutions that can be implemented across different versions of iOS.

Solution Using Attributed Strings

One of the most effective ways to control line spacing in a UILabel is by using attributed strings. This approach allows you to define paragraph styles, including line spacing, directly within your code. Here is a step-by-step method to implement this:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:label.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 1.5; // Adjust this value to set the desired spacing
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, label.text.length)];

label.attributedText = attributedString;

This method is compatible with iOS 6 and later, making it a versatile choice for developers looking to maintain consistency across different iOS versions.

Using UILabel Extension

For those looking to encapsulate this functionality within a reusable component, extending UILabel can be a practical solution. The following Swift extension provides a convenient method to adjust line spacing:

extension UILabel {
    func setLineSpacing(lineSpacing: CGFloat = 0.0, lineHeightMultiple: CGFloat = 0.0) {
        guard let labelText = self.text else { return }
        
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpacing
        paragraphStyle.lineHeightMultiple = lineHeightMultiple
        
        let attributedString: NSMutableAttributedString
        if let labelAttributedText = self.attributedText {
            attributedString = NSMutableAttributedString(attributedString: labelAttributedText)
        } else {
            attributedString = NSMutableAttributedString(string: labelText)
        }
        
        attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedString.length))
        
        self.attributedText = attributedString
    }
}

This extension method can be called to set the line spacing dynamically, providing greater flexibility when displaying text.

Practical Applications

Adjusting line spacing is not just about aesthetics; it can significantly enhance readability, especially in applications with dense text content or when displaying text on smaller screens. Implementing these changes can lead to a more polished and user-friendly interface.

Enhancing Your Testing Workflow with Repeato

While managing UI components like UILabels, testing becomes crucial to ensure that the changes render correctly across different devices and screen sizes. This is where Repeato can be a valuable asset. As a no-code test automation tool, Repeato allows you to create, run, and maintain automated tests for iOS apps efficiently. Its use of computer vision and AI ensures that UI changes, such as line spacing adjustments, are consistently tested across various scenarios.

Repeato’s support for data-driven and keyword-driven testing makes it a robust alternative to other tools, providing a seamless experience for developers and testers alike. By integrating Repeato into your workflow, you can streamline your development process and achieve higher quality outcomes.

Like this article? there’s more where that came from!