Swift에서 UILabel의 줄 간격을 늘리는 방법


94

몇 줄의 텍스트가있는 레이블이 있고 줄 사이의 간격을 늘리고 싶습니다. 다른 사람들이 묻는 비슷한 질문이 있지만 솔루션으로 문제가 해결되지 않습니다. 또한 내 레이블에는 단락이 포함되거나 포함되지 않을 수 있습니다. 나는 Swift. 스토리 보드를 사용하는 솔루션이 있습니까? 아니면 가능을 통해서만 NSAttributedString?

답변:


175

UILabel다음 스 니펫을 사용하여 프로그래밍 방식으로 LineSpacing을 추가하십시오 .

이전 Swift 버전

let attributedString = NSMutableAttributedString(string: "Your text")

// *** Create instance of `NSMutableParagraphStyle`
let paragraphStyle = NSMutableParagraphStyle()

// *** set LineSpacing property in points ***
paragraphStyle.lineSpacing = 2 // Whatever line spacing you want in points

// *** Apply attribute to string ***
attributedString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))

// *** Set Attributed String to your label ***
label.attributedText = attributedString

스위프트 4.0

let attributedString = NSMutableAttributedString(string: "Your text")

// *** Create instance of `NSMutableParagraphStyle`
let paragraphStyle = NSMutableParagraphStyle()

// *** set LineSpacing property in points ***
paragraphStyle.lineSpacing = 2 // Whatever line spacing you want in points

// *** Apply attribute to string ***
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))

// *** Set Attributed String to your label ***
label.attributedText = attributedString

스위프트 4.2

let attributedString = NSMutableAttributedString(string: "Your text")

// *** Create instance of `NSMutableParagraphStyle`
let paragraphStyle = NSMutableParagraphStyle()

// *** set LineSpacing property in points ***
paragraphStyle.lineSpacing = 2 // Whatever line spacing you want in points

// *** Apply attribute to string ***
attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))

// *** Set Attributed String to your label ***
label.attributedText = attributedString

3
" 'NSAttributedString'유형의 값에 'addAttribute'멤버가 없습니다."오류가 표시됩니다.
Sneha

2
NSMutableAttributedString대신 을 사용해야 합니다 NSAttributedString. 나는 asnwer를 업데이트했습니다.
Dipen Panchasara

1
사용자 정의 글꼴 Dipen Panchasara @ 또한 훌륭한과 협력
압둘 카림

7
이유는 모르겠지만, 저에게는 linespacing> = 1로 설정 한 경우에만 작동합니다. 0.5 / 0.75로 설정하려고했지만 효과가 없습니다
Aximem

2
필요 없음 NSMutableAttributedString . 사용 가능NSAttributedString(string: "Your text", attributes: [NSAttributedString.Key.paragraphStyle : paragraphStyle])
bauerMusic 19

101

Interface Builder에서 :

여기에 이미지 설명 입력

프로그래밍 방식 :

SWift 4 및 4.2

레이블 확장 사용

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)
        }

        // (Swift 4.2 and above) Line spacing attribute
        attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))


        // (Swift 4.1 and 4.0) Line spacing attribute
        attributedString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))

        self.attributedText = attributedString
    }
}

이제 추가 전화 번호 정보 기능

let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"

// Pass value for any one argument - lineSpacing or lineHeightMultiple
label.setLineSpacing(lineSpacing: 2.0) .  // try values 1.0 to 5.0

// or try lineHeightMultiple
//label.setLineSpacing(lineHeightMultiple = 2.0) // try values 0.5 to 2.0

또는 레이블 인스턴스 사용 (결과를 보려면이 코드를 복사하고 실행하기 만하면됩니다)

let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40

// Line spacing attribute
attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: stringValue.characters.count))

// Character spacing attribute
attrString.addAttribute(NSAttributedStringKey.kern, value: 2, range: NSMakeRange(0, attrString.length))

label.attributedText = attrString

스위프트 3

let label = UILabel()
let stringValue = "Set\nUILabel\nline\nspacing"
let attrString = NSMutableAttributedString(string: stringValue)
var style = NSMutableParagraphStyle()
style.lineSpacing = 24 // change line spacing between paragraph like 36 or 48
style.minimumLineHeight = 20 // change line spacing between each line like 30 or 40
attrString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSRange(location: 0, length: stringValue.characters.count))
label.attributedText = attrString

"NSAttributedStringKey.paragraphStyle"에 오류가 있습니다. 대신 "NSParagraphStyleAttributeName"을 사용했습니다.
Ahmadreza

@Alfi-Swift 언어 버전의 차이입니다. 프로젝트의 신속한 언어. 버전은 신속한 3.x 일 수 있으며 여기에 두 버전에 대한 답변이 있습니다. Swift 3 코드를 사용해보십시오.
Krunal

Hii @krunal, 인터페이스에서 Linespacing과 LineHeight를 설정하고 프로그래밍 방식으로 UILabel에 텍스트를 설정했지만 작동하지 않습니다. 인터페이스에 텍스트를 추가하면 작동합니다. 이 감사합니다. 그리고 UILabel에 속성 텍스트와 텍스트를 설정했지만 그 접근 방식이 저에게 효과적이지 않습니다.
Yogesh Patel

인터페이스 빌더 솔루션은 정적 텍스트 전용입니다. code에 속성 문자열을 추가하면 인터페이스 빌더에서 추가 한 속성은 적용되지 않습니다.
Yodagama

66

에서 줄 간격을 제어 할 수 있습니다 storyboard.

여기에 이미지 설명 입력

같은 질문입니다.


8
나는 실제로 이것을 시도했다. 그러나 작동하지 않습니다. 또한 이것은 사용자 정의 글꼴에는 유용하지 않습니다.
Sneha

사용자 정의 글꼴이 잘못 정렬 된 경우 여기에 언급 된ascender 대로 속성 을 업데이트 하십시오 .
pkc456

1
오정렬 문제가 아닙니다. 나는이 솔루션을 내 사용자 지정 글꼴을 선택할 수 없습니다 당신은 말했다 @ pkc456
스 네하

오정렬 문제가 아닙니다. 사용자 정의 글꼴을 선택할 수 없었지만 이제는 Attributed에서 별도로 설정을 통해 글꼴을 추가하여 문제를 해결했습니다. .하지만 여전히 남아 간격 같은 @ pkc456
스 네하

15
이것은 정적 텍스트 전용입니다. 텍스트 프로그램을 추가해보십시오. 작동하지 않습니다.
Sneha

11

Swift 5.0을위한 최신 솔루션

private extension UILabel {

    // MARK: - spacingValue is spacing that you need
    func addInterlineSpacing(spacingValue: CGFloat = 2) {

        // MARK: - Check if there's any text
        guard let textString = text else { return }

        // MARK: - Create "NSMutableAttributedString" with your text
        let attributedString = NSMutableAttributedString(string: textString)

        // MARK: - Create instance of "NSMutableParagraphStyle"
        let paragraphStyle = NSMutableParagraphStyle()

        // MARK: - Actually adding spacing we need to ParagraphStyle
        paragraphStyle.lineSpacing = spacingValue

        // MARK: - Adding ParagraphStyle to your attributed String
        attributedString.addAttribute(
            .paragraphStyle,
            value: paragraphStyle,
            range: NSRange(location: 0, length: attributedString.length
        ))

        // MARK: - Assign string that you've modified to current attributed Text
        attributedText = attributedString
    }

}

그리고 사용법 :

let yourLabel = UILabel()
let yourText = "Hello \n world \n !"
yourLabel.text = yourText
yourLabel.addInterlineSpacing(spacingValue: 1.5)

물론 이것은 당신이 사용 UILabel.text하지 않는 경우에만 작동합니다UILabel.attributedText
JeroenJK

9

이 재사용 가능한 확장을 사용할 수 있습니다.

extension String {

func lineSpaced(_ spacing: CGFloat) -> NSAttributedString {
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = spacing
    let attributedString = NSAttributedString(string: self, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
    return attributedString
}
}

5

Swift 4 및 Swift 5

extension NSAttributedString {
    func withLineSpacing(_ spacing: CGFloat) -> NSAttributedString {


        let attributedString = NSMutableAttributedString(attributedString: self)
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineBreakMode = .byTruncatingTail
        paragraphStyle.lineSpacing = spacing
        attributedString.addAttribute(.paragraphStyle,
                                      value: paragraphStyle,
                                      range: NSRange(location: 0, length: string.count))
        return NSAttributedString(attributedString: attributedString)
    }
}

사용하는 방법

    let example = NSAttributedString(string: "This is Line 1 \nLine 2 \nLine 3 ").withLineSpacing(15)
    testLabel.attributedText = example

예


굉장함! 내 시간을 절약했습니다!
Codetard

4

Swift 4에 대한 Dipen의 답변 업데이트

let attr = NSMutableAttributedString(string: today)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 2
attr.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSMakeRange(0, attr.length))
label.attributedText = attr;

1
//Swift 4:
    func set(text:String,
                         inLabel:UILabel,
                         withLineSpacing:CGFloat,
                         alignment:NSTextAlignment){
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = withLineSpacing
            let attrString = NSMutableAttributedString(string: text)
            attrString.addAttribute(NSAttributedStringKey.paragraphStyle,
                                    value:paragraphStyle,
                                    range:NSMakeRange(0, attrString.length))
            inLabel.attributedText = attrString
            inLabel.textAlignment = alignment
          }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.