কীভাবে সুইফটে ইউআইএলবেলে লাইন ব্যবধান বাড়ানো যায়


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

4
এটি একটি ত্রুটি দেখায় "জাতীয় মানের এনএসএট্রিবিউটস্ট্রিং'র কোনও সদস্য 'অ্যাডঅ্যাট্রিবিউট' নেই"।
স্নেহা

4
NSMutableAttributedStringপরিবর্তে আমাদের ব্যবহার করা উচিত NSAttributedString। আমি অ্যাডওয়ার আপডেট করেছি।
পঞ্চসরা দীপেন

4
কাস্টম ফন্টগুলিও দুর্দান্ত @ দীপেন পঞ্চসরা নিয়ে কাজ করুন
আব্দুল করিম

7
আমি জানি না তবে আমার হিসাবে, এটি কেবল তখনই কাজ করছে যদি আপনি লাইনপেসিং> = 1 সেট করেন তবে আমি 0.5 / 0.75 সেট করার চেষ্টা করেছি, এর কোনও প্রভাব নেই
এক্সিমিম

4
দরকার নেই 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

"এনএসএট্রিবিউটেড স্ট্রিংকি.পি.গ্রাফ স্টাইল" এর ত্রুটি ছিল, আমি তার পরিবর্তে "এনএসপিআগ্রাফ স্টাইলঅ্যাট্রিবিউটনেম" ব্যবহার করেছি।
আহমাদরেজা

@ আলফি - এটি সুইফট ভাষা সংস্করণের পার্থক্য। আপনার প্রকল্পের সুইফ ল্যাং সংস্করণটি দ্রুত 3.x হতে পারে এবং উভয় সংস্করণের উত্তর এখানে রয়েছে। সুইফট 3 কোড দিয়ে চেষ্টা করুন।
ক্রুনাল

হাই @ ক্রুনাল, আমি ইন্টারফেসে লাইনস্পেসিং এবং লাইনহাইট সেট করেছি এবং আমি ইউআইএবেবেলে প্রোগ্রাম্যাটিকভাবে পাঠ্য সেট করেছি তবে এটি কার্যকর হচ্ছে না। যদি আমি ইন্টারফেসে পাঠ্য যোগ করি তবে এটি কার্যকর হয়। আপনি কি আমাকে ধন্যবাদ জানাতে দয়া করে আমাকে সাহায্য করতে পারেন এবং আমি ইউআইএলবেলে অ্যাট্রিবিউটটেক্সট এবং পাঠ্যও সেট করেছিলাম কিন্তু সেই পদ্ধতিটি আমার পক্ষে কাজ করছে না।
যোগেশ প্যাটেল

ইন্টারফেস বিল্ডার সমাধানটি কেবল স্থির পাঠ্যের জন্য text যখন আমরা কোডটিতে বিশিষ্ট স্ট্রিং যুক্ত করি, ইন্টারফেস বিল্ডার থেকে যুক্ত করা সেই বৈশিষ্ট্য প্রয়োগ করা হয় না।
যোদগামা

66

আপনি লাইনের ব্যবধানটি নিয়ন্ত্রণ করতে পারেন storyboard

এখানে চিত্র বর্ণনা লিখুন

একই প্রশ্ন.


8
আমি আসলে এটি চেষ্টা করেছিলাম। কিন্তু এটি কাজ করে না। এছাড়াও এটি কাস্টম ফন্টগুলির জন্য কার্যকর নয়।
স্নেহা

আপনি যদি কাস্টম ফন্টগুলিতে ভুল-প্রান্তিকরণের মুখোমুখি ascenderহন তবে এখানে বর্ণিত হিসাবে সম্পত্তিটি আপডেট করার চেষ্টা করুন
pkc456

4
এটি ভুল-প্রান্তিককরণের সমস্যা নয়। আপনি যে সমাধানটি দিয়েছিলেন তা দিয়ে আমি আমার কাস্টম ফন্ট নির্বাচন করতে পারি না @ pkc456
স্নেহা

এটি ভুল-প্রান্তিককরণের সমস্যা নয়। আমি আমার কাস্টম হরফটি নির্বাচন করতে পারি না B তবে এখন আমি এট্রিবিউটে আলাদাভাবে সেটিংসের মাধ্যমে আমার ফন্ট যুক্ত করে সমাধান করেছি। তবে এখনও ব্যবধানটি একই রয়েছে। @ 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
জেরোইন

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
          }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.