[objective-c] UILabel에서 줄 간격을 제어하는 ​​방법

에 여러 줄을 넣을 때 텍스트 사이의 간격을 줄일 수 UILabel있습니까? 프레임, 글꼴 크기 및 줄 수를 설정할 수 있습니다. 해당 레이블의 두 줄 사이의 간격을 줄이려고합니다.



답변

이 답변에 새로운 것을 추가하는 것에 대해 생각했기 때문에 나쁘지 않습니다 … 여기 스위프트 답변이 있습니다.

import Cocoa

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 40

let attrString = NSMutableAttributedString(string: "Swift Answer")
attrString.addAttribute(.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))

var tableViewCell = NSTableCellView()
tableViewCell.textField.attributedStringValue = attrString

“짧은 대답 : 할 수 없습니다. 텍스트 줄 사이의 간격을 변경하려면 UILabel을 서브 클래스로 만들고 자체 drawTextInRect를 굴 리거나 여러 레이블을 만들어야합니다.”

참조 : UILabel 줄 간격 설정


이것은 정말 오래된 답변이며 다른 사람들은 이미 이것을 처리하는 새롭고 더 나은 방법을 추가했습니다. 아래 제공된 최신 답변을 참조하십시오.


답변

Xcode 6에서는 스토리 보드에서이를 수행 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


답변

iOS 6부터 UILabel에 속성 문자열을 설정할 수 있습니다. 다음을 확인하십시오.

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:label.text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = spacing;
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, label.text.length)];

label.attributedText = attributedString;


답변

여기에 언급 된 솔루션은 효과가 없었습니다. iOS 6 NSAttributeString으로 약간 다른 방법을 찾았습니다.

myLabel.numberOfLines = 0;
NSString* string = @"String with line one. \n Line two. \n Line three.";
NSMutableParagraphStyle *style  = [[NSMutableParagraphStyle alloc] init];
style.minimumLineHeight = 30.f;
style.maximumLineHeight = 30.f;
NSDictionary *attributtes = @{NSParagraphStyleAttributeName : style,};
myLabel.attributedText = [[NSAttributedString alloc] initWithString:string
                                                         attributes:attributtes];
[myLabel sizeToFit];


답변

이 간단한 확장 프로그램을 만들어서 매우 잘 작동했습니다.

extension UILabel {
    func setLineHeight(lineHeight: CGFloat) {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 1.0
        paragraphStyle.lineHeightMultiple = lineHeight
        paragraphStyle.alignment = self.textAlignment

        let attrString = NSMutableAttributedString()
        if (self.attributedText != nil) {
            attrString.append( self.attributedText!)
        } else {
            attrString.append( NSMutableAttributedString(string: self.text!))
            attrString.addAttribute(NSAttributedStringKey.font, value: self.font, range: NSMakeRange(0, attrString.length))
        }
        attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
        self.attributedText = attrString
    }
}

이것을 파일로 복사하면 다음과 같이 사용할 수 있습니다

myLabel.setLineHeight(0.7)


답변

Interface Builder (Storyboard / XIB)에서 :

여기에 이미지 설명을 입력하십시오

프로그래밍 방식으로 :

SWift 4

라벨 확장 사용

extension UILabel {

    // Pass value for any one of both parameters and see result
    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)
        }

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

        self.attributedText = attributedString
    }
}

이제 전화 확장 기능

let label = UILabel()
let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"

// 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 = "How to\ncontrol\nthe\nline spacing\nin UILabel"
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 = "How to\ncontrol\nthe\nline spacing\nin UILabel"
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


답변

iOS 6에는 대체 단락 답변이 있습니다. 이는 적절한 단락 스타일과 함께 NSAttributedString을 사용하여 레이블에 coloredText를 설정합니다. NSAttributedString을 사용한 행 높이에 대한 자세한 내용은이 스택 오버플로 응답을 참조하십시오.

핵심 텍스트-NSAttributedString 줄 높이가 제대로 되었습니까?