स्विफ्ट में UILabel में लाइन स्पेस कैसे बढ़ाएं


94

मेरे पास एक लेबल है जिसमें पाठ की कुछ पंक्तियां हैं और मैं लाइनों के बीच अंतर को बढ़ाना चाहता हूं। दूसरों द्वारा पूछे गए समान प्रश्न हैं, लेकिन समाधान मेरी समस्याओं का समाधान नहीं करते हैं। इसके अलावा मेरे लेबल में पैराग्राफ शामिल हो सकते हैं या नहीं भी हो सकते हैं। मैं नया हूँ Swift। क्या स्टोरीबोर्ड का उपयोग करके कोई समाधान है? या केवल NSAttributedStringइसके माध्यम से संभव है?

जवाबों:


175

UILabelनिम्नलिखित स्निपेट का उपयोग करके अपने प्रोग्राम में लाइनस्पर्श जोड़ें ।

इससे पहले स्विफ्ट संस्करण

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' नहीं है।"
स्नेहा

2
हमें NSMutableAttributedStringइसके बजाय उपयोग करने की आवश्यकता है NSAttributedString। मैंने asnwer को अपडेट किया है।
दीपन पंचसारा

1
कस्टम फ़ॉन्ट्स के साथ भी काम करें महान @ दिपेन पंचसारा
अब्दुल करीम

7
मैं नहीं जानता कि क्यों, लेकिन मेरे लिए, यह केवल तभी काम कर रहा है जब आप लाइन्सस्पेसिंग = = 1 सेट करते हैं, मैंने 0.5 / 0.75 सेट करने की कोशिश की, इसका कोई असर नहीं हुआ
Aximem

2
की कोई जरूरत नहीं NSMutableAttributedString। उपयोग कर सकते हैंNSAttributedString(string: "Your text", attributes: [NSAttributedString.Key.paragraphStyle : paragraphStyle])
bauerMusic

101

इंटरफ़ेस बिल्डर से:

यहाँ छवि विवरण दर्ज करें

प्रोग्राम के रूप में:

स्विफ्ट 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" का उपयोग किया।
अहमदेज़ा

@ अफीली - यह स्विफ्ट भाषा के संस्करण का अंतर है। आपके प्रोजेक्ट की स्विफ्ट लैंग। संस्करण 3.x स्विफ्ट हो सकता है और यहां दोनों संस्करणों के उत्तर दिए गए हैं। स्विफ्ट 3 कोड के साथ प्रयास करें।
क्रुणाल

Hii @krunal, मैंने इंटरफ़ेस में लाइन्सस्पेसिंग और लाइनहाइट सेट किया है और मैंने यूआईबेल में प्रोग्रामेटिक रूप से टेक्स्ट सेट किया है लेकिन यह काम नहीं कर रहा है। अगर मैं इंटरफ़ेस में पाठ जोड़ता हूं तो यह काम करता है। क्या आप मुझे इस थैंक यू के लिए मदद कर सकते हैं और मैंने यूआईटैब में एट्रिब्यूटेड टेक्स्ट और टेक्स्ट भी सेट किया है लेकिन वह तरीका मेरे लिए काम नहीं कर रहा है।
योगेश पटेल

इंटरफ़ेस बिल्डर समाधान केवल स्थिर पाठ के लिए है। जब हम कोड में जिम्मेदार स्ट्रिंग जोड़ते हैं, तो इंटरफ़ेस बिल्डर से जो विशेषता जोड़ी जाती है, वह लागू नहीं होती है।
योद्गामा

66

आप लाइन रिक्ति को नियंत्रित कर सकते हैं storyboard

यहाँ छवि विवरण दर्ज करें

वही प्रश्न।


8
मैंने वास्तव में यह कोशिश की। लेकिन इसका काम नहीं हो रहा है। इसके अलावा यह कस्टम फोंट के लिए उपयोगी नहीं है।
स्नेहा

यदि आप कस्टम फोंट में गलत संरेखण का सामना कर रहे हैं, तो यहां बताए अनुसार ascenderसंपत्ति को अपडेट करने का प्रयास करें
pkc456

1
इसके गलत संरेखण की समस्या नहीं है। मैं @ pkc456
स्नेहा

इसके गलत संरेखण की समस्या नहीं है। मैं अपने कस्टम फॉन्ट का चयन नहीं कर सका। लेकिन अब मैंने हल किया है कि अपने फ़ॉन्ट को सेटिंग्स में अलग-अलग तरीके से जोड़कर हल किया जाए। लेकिन अभी भी रिक्ति समान है। @ pkc456
स्नेहा

15
यह केवल स्थिर पाठ के लिए है। टेक्स्ट प्रोग्रामैटिक जोड़ने की कोशिश करें। यह काम नहीं करेगा।
स्नेहा

11

स्विफ्ट 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

स्विफ्ट 4 और स्विफ्ट 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

उदाहरण


त! मेरा समय बचाया!
कोडेटर्ड

4

स्विफ्ट 4 के लिए डिपेन का जवाब अपडेट

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
          }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.