UILabel लाइन रिक्ति सेट करें


जवाबों:


122

संपादित करें: जाहिर NSAttributedStringहै यह iOS 6 और बाद में करेगा। NSStringलेबल के पाठ को सेट करने के लिए उपयोग करने के बजाय NSAttributedString, उस पर एक विशेषता सेट करें, फिर उसे .attributedTextलेबल पर सेट करें । आपको जो कोड चाहिए वह कुछ इस तरह होगा:

NSMutableAttributedString* attrString = [[NSMutableAttributedString  alloc] initWithString:@"Sample text"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:24];
[attrString addAttribute:NSParagraphStyleAttributeName
    value:style
    range:NSMakeRange(0, strLength)];
uiLabel.attributedText = attrString;

NSAttributedString के पुराने attributedStringWithString ऐसा ही किया था, लेकिन अब है कि पदावनत किया जा रहा है।

ऐतिहासिक कारणों से, यहां मेरा मूल उत्तर है:

संक्षिप्त उत्तर: आप नहीं कर सकते। पाठ की पंक्तियों के बीच अंतर को बदलने के लिए, आपको UILabelअपने स्वयं के उप-वर्ग और रोल करने होंगे drawTextInRect, कई लेबल बनाने होंगे, या एक अलग फ़ॉन्ट का उपयोग करना होगा (शायद एक विशिष्ट पंक्ति ऊंचाई के लिए संपादित किया गया है, फिलिप्स का जवाब देखें)।

दीर्घ उत्तर: प्रिंट और ऑनलाइन दुनिया में, पाठ की पंक्तियों के बीच की जगह को "अग्रणी" ('शीर्षक' के साथ गाया जाता है, और दशकों पहले इस्तेमाल की गई प्रमुख धातु से आता है)। अग्रणी केवल पढ़ने की संपत्ति है UIFont, जिसे 4.0 में पदावनत किया गया था और उसके द्वारा प्रतिस्थापित किया गया था lineHeight। जहाँ तक मुझे पता है, कोई विशिष्ट मापदंड जैसे सेट के साथ फ़ॉन्ट बनाने का कोई तरीका नहीं है lineHeight; आपको सिस्टम फोंट और आपके द्वारा जोड़ा गया कोई भी कस्टम फॉन्ट मिलता है, लेकिन एक बार इंस्टॉल होने के बाद उन्हें ट्विक नहीं किया जा सकता।

इसमें कोई रिक्ति पैरामीटर नहीं है UILabel

मैं विशेष UILabelरूप से उसके व्यवहार से खुश नहीं हूँ , इसलिए मेरा सुझाव है कि आप अपना उपवर्ग लिखें या तृतीय-पक्ष पुस्तकालय का उपयोग करें। यह आपके फ़ॉन्ट विकल्प के व्यवहार को स्वतंत्र बना देगा और सबसे पुन: प्रयोज्य समाधान होगा।

काश में अधिक लचीलापन होता UILabel, और मुझे गलत साबित होने में खुशी होती!


1
मैंने इसे सब-क्लासिंग यूआईबेल के साथ किया है, मूल रूप से यह विचार है कि लेबल टेक्स्ट को टोकन में विभाजित करें, और फिर प्रत्येक टोकन की पहचान लंबाई, प्रत्येक टोकन के लिए एक अलग लेबल बनाएं और एक के बाद एक संलग्न करें। बस।
मेट्रिक्स

3
झूठ! ;) आप लाइन की ऊंचाई बदलने के लिए एक फ़ॉन्ट फ़ाइल को पैच कर सकते हैं - इस पृष्ठ पर मेरा उत्तर देखें।
फिलिप

मुझे विश्वास है कि NSAttributedString के साथ ऐसा करने का एक तरीका है। यदि आपको पूर्व iOS 6 में जिम्मेदार स्ट्रिंग्स के साथ लेबल की आवश्यकता है, तो OHAttributedLabel देखें
स्पेंसर विलियम्स

NSAttributesString साथ यह करने के लिए यदि आप आईओएस> = 6 का उपयोग उदाहरण
d.ennis

यह सिंपल और वर्किंग फाइन है।
आर। मोहन

75

Ios 6 में शुरू होने से आप UILabel में एक जिम्मेदार स्ट्रिंग सेट कर सकते हैं:

NSString *labelText = @"some text"; 
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:40];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
cell.label.attributedText = attributedString ;

1
धन्यवाद! मुझे लगता है कि AttributedStringउदाहरण के लेबल के पाठ संरेखण के लिए अक्षम का उपयोग कर, तो आप इसे पैरा शैली में जोड़ना होगा।
साइबरबोरियल

56

आप स्टोरीबोर्ड में लाइन रिक्ति को नियंत्रित कर सकते हैं:

नकल का सवाल


10
हालाँकि Xcode 6.1.1 में लेबल का चयन और एट्रिब्यूट पैनल में लाइन वैल्यू को बदलने से पैनल को झिलमिलाहट और एप्लिकेशन लॉक हो जाएगा। मैं केवल ज़बरदस्त एक्सकोड द्वारा पैनल से बाहर निकलने में सक्षम रहा हूं।
izk

4
एनीमेशन के लिए अंगूठे
Tieme

1
संस्करण 7.1 में पैनल फ़्लिक करता है और रन टाइम पर इसका कोई प्रभाव नहीं पड़ता है। कोड में करना था।
मिगेलस्लैव

४४० वाट बिजली मेरे पैनल के माध्यम से अभी-अभी
चली है

23

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

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

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

स्विफ्ट 4

लेबल एक्सटेंशन का उपयोग करना

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

        // 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 = "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

केवल एक तर्क लाइन पास करने की जरूरत है या एकाधिक उत्तीर्ण करने के लिए, दोनों पास नहीं कर सकते हैं अन्य कोई तर्क नहीं आएंगे, मुझे लगता है
अर्पित बी पारेख

16

मेरा समाधान फ़ॉन्ट फ़ाइल को स्वयं पैच करना और निश्चित रूप से इसकी लाइन ऊंचाई को ठीक करना था। http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/

मुझे 'hhea' ब्लॉक (ब्लॉग उदाहरण में) के रूप में 'लाइनगैप', 'आरोही', 'अवरोही' को संशोधित करना था।


बेहद कूल! उन OS X फ़ॉन्ट टूल ने मेरे OTF फ़ॉन्ट के लिए भी काम किया (हालाँकि यह केवल TTF को निर्दिष्ट करता है ...)। मेरे फ़ॉन्ट की लाइन-ऊंचाई 1000 (!) थी, मैंने इसे 0 में बदल दिया और वॉइला। मेरे पास प्रत्येक पंक्ति पर पाठ के नीचे खाली स्थान का मील और मील था।
जॉनी

2
मैं विश्वास नहीं कर सकता यह सबसे अच्छा समाधान है (कोई अपराध नहीं!), लेकिन यह अब तक का सबसे सरल है। मैंने अपने फोंट को संपादित करने के लिए मुफ्त (विंडोज) सॉफ्टवेयर टाइप लाइट (और फॉन्ट | मेट्रिक्स | एडवांस्ड आप लाइनगैप को संशोधित कर सकते हैं) का इस्तेमाल किया। यह आपको फोंट को "रीनेम" करने की भी अनुमति देता है, जिसे मैं यह नहीं बता सकता कि उपकरण फिलिप का उल्लेख करने का तरीका क्या है।
Kirk Woll

यह शानदार @Philippe है! पोस्ट के लिए धन्यवाद!!
रोबी

अधिक विवरण के लिए इसी तरह के प्रश्न के लिए मेरा जवाब भी देखें: stackoverflow.com/a/19553827/201828
phatmann

@iamjustaprogrammer यह फिर से ऑनलाइन है।
मैट बी।


7

मुझे मिली सबसे अच्छी बात यह है: https://github.com/mattt/TTTAttributedLabel

यह एक यूबेल उप-वर्ग है इसलिए आप इसे बस में छोड़ सकते हैं, और फिर लाइन की ऊँचाई को बदल सकते हैं:

myLabel.lineHeightMultiple = 0.85;
myLabel.leading = 2;


2

प्रोग्राम को रिक्तिमान रूप से सेट करने के लिए यहां कुछ स्विफ्ट-कोड दिए गए हैं

let label = UILabel()

let attributedText = NSMutableAttributedString(string: "Your string")
let paragraphStyle = NSMutableParagraphStyle()

//SET THIS:
paragraphStyle.lineSpacing = 4
//OR SET THIS:
paragraphStyle.lineHeightMultiple = 4

//Or set both :)

let range = NSMakeRange(0, attributedText.length)
attributedText.addAttributes([NSParagraphStyleAttributeName : paragraphStyle], range: range)
label.attributedText = attributedText

0

यदि आप स्ट्रिंग को प्रोग्रामिक रूप से पास करते हैं, तो निश्चित रूप से, माइक का जवाब काम नहीं करता है। इस मामले में आपको एक जिम्मेदार स्ट्रिंग पास करने और इसे शैली बदलने की आवश्यकता है।

NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"Your \nregular \nstring"];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:4];
[attrString addAttribute:NSParagraphStyleAttributeName
                   value:style
                   range:NSMakeRange(0, attrString.length)];
_label.attributedText = attrString;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.