ইউআইএবেবেলে কীভাবে লাইন ব্যবধানটি নিয়ন্ত্রণ করতে হয়


273

যখন একের মধ্যে একাধিক লাইনে রাখা হয় তখন কি পাঠ্যের মধ্যকার ফাঁক হ্রাস করা সম্ভব UILabel? আমরা ফ্রেম, ফন্টের আকার এবং লাইনের সংখ্যা নির্ধারণ করতে পারি। আমি সেই লেবেলের দুটি লাইনের মধ্যে ফাঁক হ্রাস করতে চাই।



2
আমি কি আপনাকে পরামর্শ দিতে পারি যে আপনি যে কোনও উত্তর আইওএস 6.0 এবং এর পরে সঠিক? বর্তমানে গৃহীত উত্তরগুলি তারিখের বাইরে।
মার্ক আমেরিকা

প্রতিটি লাইনের জন্য একটি নতুন ব্যবহার করুন UILabel, তারপরে একটিতে সমস্ত লেবেল এম্বেড করুন StackView। অবশেষে সমন্বয় spacingএর StackView। তাদের উল্লম্বভাবে স্ট্যাক মনে রাখবেন।
মধু

সুইফট ২ এ সমাধানের জন্য নীচের লিঙ্কটি দেখুন: stackoverflow.com/a/39158698/6602495
স্নেহা

স্টোরিবোর্ডের ত্বক এবং অন্যান্য বিবরণের জন্য stackoverflow.com/a/44325650/342794 দেখুন।
লল

উত্তর:


261

আমি এই উত্তরে নতুন কিছু যুক্ত করার কথা ভেবেছিলাম, তাই আমার মতো খারাপ লাগে না ... এখানে একটি দ্রুত উত্তর:

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

"সংক্ষিপ্ত উত্তর: আপনি পারবেন না text পাঠ্যের লাইনের মধ্যে ব্যবধানটি পরিবর্তন করতে আপনাকে ইউআইএলবেল সাবক্লাস করতে হবে এবং আপনার নিজস্ব অঙ্কন পাঠ্যনাইনরেক্ট রোল করতে হবে, বা একাধিক লেবেল তৈরি করতে হবে।"

দেখুন: ইউআইএলবেল লাইনের ব্যবধান সেট করুন


এটি একটি সত্যই পুরানো উত্তর এবং অন্যান্যরা ইতিমধ্যে এটি পরিচালনা করার জন্য নতুন এবং আরও ভাল উপায় যুক্ত করেছেন .. নীচে প্রদত্ত আপ টু ডেট উত্তরগুলি দেখুন।


23
আইওএস NSAttributedString.0.০ , যেহেতু আপনি এটির মাধ্যমে নিয়ন্ত্রণ করতে পারবেন (এক্সকোডের ইন্টারফেস বিল্ডারে ইউআইএল'র বৈশিষ্ট্যগুলিতেও উপলভ্য)।
ǝʞuǝʞ

13
মজার বিষয় হল, আমি যতটুকু বলতে পারি, আপনি লাইনগুলির মধ্যে অতিরিক্ত ব্যবধান যুক্ত করতে পারেন, তবে এটি NSParagraphStyleব্যবহার করার সময় এটি হ্রাস করতে পারবেন না NSAttributedString। (আমার অন্যান্য সংশোধনযোগ্য বৈশিষ্ট্যগুলির আরও পরীক্ষা করার প্রয়োজন হতে পারে তবে lineSpacingসম্পত্তি কেবল আপনাকে এটি বাড়ানোর অনুমতি দেয়))
livetech

এনএসএট্রিবিউটেড স্ট্রিং
d.ennes

2
@ লিভিংটেক এটি হিংস্র, এবং আমি বিশ্বাস করি আপনি সঠিক। আপনি কি কোনও কাজের সন্ধান পেয়েছেন?
ডম ভিনিয়ার্ড

7
এই থ্রেডে কিছু স্পষ্ট করার জন্য। আপনি যদি লাইন স্পেসিংটি সঙ্কুচিত করতে চান তবে লাইনের উচ্চতা ১.০ এ সেট করুন এবং তারপরে লাইনে হাইটমুটপলিটকে একটি নিম্ন মানের <1.0 এর মতো সেট করুন: যেমন: [অনুচ্ছেদে স্টাইল সেটলাইন হাইটমুটলিট: 0.8] বা অনুচ্ছেদ
স্টাইল.লাইন হাইটমুটলিট

401

এক্সকোড 6 এ আপনি স্টোরিবোর্ডে এটি করতে পারেন:

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


1
স্টোরিবোর্ডের আরও সুবিধা নিন!
অ্যালেন

22
@ পেপারটিকের একই সমস্যা 6.1.1 এ রয়েছে। এটি কয়েক মিনিটের জন্য "হারলেম শেক"। কিভাবে এটা :) ঠিক করতে জানে না Xcode কম্পন
আন্তন Gaenko

8
এইভাবে কাস্টম ফন্ট সেট করার কোনও উপায় আছে? আমি হেলভিটিকার প্রয়োজন অন্য কোনও ফন্টের কাছে বদলাতে পারি না।
মার্কোস কারভেলো

2
আপনি যদি 'অ্যাট্রিবিউটেড' সক্ষম করেন এবং তারপরে ফাইলটি সোর্স কোড হিসাবে খুলতে পারেন তবে আপনি নিজেই 'লাইন হাইটমલ્ટিয়ালপ্লেট' সম্পাদনা করতে পারেন এবং সেইজন্য হারলেম শেক বাগ
ED-209

2
@ আজদেব যে কেউ এখনও এটির জন্য তাকিয়ে আছেন, আমি এক্সকোড .3.৩-তে আরও বেশি কাঁপুনি পাচ্ছি, তবে আমি মনে করি এটি প্রথম সংস্করণ যেখানে এটি কোনও সমস্যা হয়নি
লুলকো

103

আইওএস 6 থেকে শুরু করে আপনি ইউআইএলবেলে একটি বিশিষ্ট স্ট্রিং সেট করতে পারেন। নিম্নলিখিত পরীক্ষা করুন:

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;

1
attributedStringএকটি হওয়া আবশ্যক NSMutableAttributedString(না NSAttributedString)
মাইক এস

14
প্রথম লাইন কোডটি হওয়া উচিতNSMutableAttributedString *attributedString = [NSMutableAttributedString alloc]initWithString:@"sample text"];
অ্যালেন

এর lineSpacingসম্পত্তি NSMutableParagraphStyleকখনই নেতিবাচক হয় না, সুতরাং লাইনের উচ্চতা এই পদ্ধতির সাথে হ্রাস করা যায় না। প্রশ্নের উত্তর দিতে, আপনাকে অন্য সম্পত্তি ব্যবহার করতে হবে, @ d.ennis উত্তর দেখুন।
থিও

81

এখানে বর্ণিত সমাধানগুলি আমার পক্ষে কার্যকর হয়নি। আইওএস 6 এনএসএট্রিবিউটস্ট্রিংয়ের সাথে এটি করার জন্য আমি কিছুটা ভিন্ন উপায় খুঁজে পেয়েছি:

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];

1
লাইনের উচ্চতা হ'ল ফন্টের আকার নির্ভর। লাইন ব্যবধান কেবল লাইন ব্যবধান। আপনি কেবল ন্যূনতম / সর্বাধিক লাইনের উচ্চতা নির্ধারণ করে জিনিসগুলি কার্যকর করতে পারেন তবে এটি কেবলমাত্র কারণ আপনি ব্যবহার করছেন বর্তমান ফন্ট আকারগুলি লাইন উচ্চতার সীমানার চেয়ে বেশি নয়। ডকুমেন্টেশন অনুসারে: "... এই উচ্চতা অতিক্রমকারী গ্লাইফস এবং গ্রাফিকগুলি প্রতিবেশী লাইনগুলিকে ওভারল্যাপ করবে ... যদিও এই সীমাটি নিজেই লাইনের ক্ষেত্রে প্রযোজ্য, লাইন স্পেসিং সংলগ্ন লাইনের মধ্যে অতিরিক্ত স্থান যুক্ত করে।"
অ্যারি ব্রাগিনস্কি

+1, আপনি যদি লাইনের মধ্যে ব্যবধান কমিয়ে আনতে চান তবে এটিই করতে চান। আসল লাইন ব্যবধানটি সম্ভবত ডিফল্ট হিসাবে 0 হয়, এই কারণেই লোকেরা আপনাকে কেবল এটি বৃদ্ধি করতে পারে বলে প্রতিবেদন করে। ব্যবধানটি খুব বড় হওয়ায় সমস্যাটি লাইন উচ্চতা থেকে খুব বড় হওয়া থেকে আসে, এই কারণেই এই সময়টি 99% কাজটি সম্পন্ন করবে।
লিকিউ

1
ফটোশপ, স্কেচ, সিএসএস ইত্যাদির মতো অ্যাপ্লিকেশনগুলি ডিজাইনের জন্য প্রকৃত লাইনের উচ্চতার মান (একটি অনুপাতের পরিবর্তে) সাধারণ ব্যবহার করে এটিই কেবলমাত্র আমি উত্তর পেতে পারি
অ্যালবার্ট বোরি

35

আমি এই সাধারণ এক্সটেনশনটি করেছি যা আমার পক্ষে খুব ভালভাবে কাজ করে:

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)

মনে রাখবেন আপনি যখন এই লেবেলের জন্য স্টোরিবোর্ড ব্যবহার করছেন তখন আপনি এটি করছেন তবে আপনার লেবেলের লাইনগুলি 0
মধু

আপনি কেন কেবল সরাসরি সেট করে lineSpacingসেটিংসটি ভুলে যাবেন না lineHeightMultiple?
মধু 3

কারণ লাইনের উচ্চতা হ্রাস করার কীটি হ'ল 'লাইনহাইটমલ્ટিয়ালপ্লেল', কোনও লাইন স্পেসিং নেই
আগস্টিন মেরিলস

বলুন যে আপনি চান আপনার লাইনের উচ্চতা 1.4 হওয়া, কেন আপনি কেবল লিখতে .lineSpacing = 1.4এবং সব কিছু ভুলে যেতে পারবেন না .lineHeightMultiple...
হানি

Hah! আমি চেষ্টা করেছিলাম, এবং আমি কাজ করি নি, তবে আমি ভাবছি কেন আমি এখানে অন্য উত্তরগুলি আপনার যান্ত্রিকতাটি ব্যবহার না করে দেখছি না, আমি বলতে চাইছি তারা সরাসরি লাইনস্পেসিংটি সেট করেছে। গৃহীত উত্তরটি দেখুন ...
মধু

33

ইন্টারফেস বিল্ডার (স্টোরিবোর্ড / এক্সআইবি) থেকে:

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

প্রোগ্রামেটিক্যালি:

সুইফট 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

2
মূল প্রান্তিককরণ রাখতে "অনুচ্ছেদে স্টাইল.ালাইনমেন্ট = সেলফ টেক্সটএলাইনমেন্ট" লাইনটি যুক্ত করুন। অন্যথায়, পাঠ্যটি প্রান্তিককরণে রেখে দেওয়া হবে।
নিতিন মাইকেল

বড় গ্রন্থে উপর ঊহ্য শব্দ loosing কারো জন্য, তারপর ব্যবহার করুন: paragraphStyle.lineBreakMode = .byTruncatingTail
christostsang

19

আইওএস in এ এখন বিকল্প উত্তর রয়েছে যা উপযুক্ত অনুচ্ছেদের শৈলীর সাথে এনএসএট্রিবিউটেড স্ট্রিং ব্যবহার করে লেবেলে অ্যাট্রিবিউটটেক্সট সেট করতে হবে। এনএসএট্রিবিউটেড স্ট্রিং সহ লাইনের উচ্চতায় বিশদগুলির জন্য এই স্ট্যাক ওভারফ্লো উত্তরটি দেখুন:

মূল পাঠ্য - এনএসএট্রিবিউটেড স্ট্রিং লাইনের উচ্চতা সঠিকভাবে সম্পন্ন হয়েছে?


16

এখানে এমন একটি শ্রেণি রয়েছে যা ইউিলাবেলকে লাইন-উচ্চতার সম্পত্তি রাখতে সাবক্লাস করে: https://github.com/LemonCake/MSLabel


এটি আমার জন্য কাজ করেছে, ধন্যবাদ। আমি এমটিএবেল ব্যবহার করার চেষ্টাও করেছি, তবে এটি আরও ভাল ছিল।
ডেনিস কুতলুবায়েভ

1
এমএসএলবেল '\ n' চরিত্রটিকে সমর্থন করে কিনা তা কি কেউ জানেন?
আচি

11

সুইফটে এবং একটি ফাংশন হিসাবে, ডার্কডাস্ট দ্বারা অনুপ্রাণিত

// Usage: setTextWithLineSpacing(myEpicUILabel,text:"Hello",lineSpacing:20)
func setTextWithLineSpacing(label:UILabel,text:String,lineSpacing:CGFloat)
{
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = lineSpacing

    let attrString = NSMutableAttributedString(string: text)
    attrString.addAttribute(NSAttributedString.Key.paragraphStyle, value:paragraphStyle, range:NSMakeRange(0, attrString.length))

    label.attributedText = attrString
}

7

@ মাইকের উত্তর অনুসারে, হ্রাস lineHeightMultipleহ'ল মূল বিষয়। নীচে উদাহরণস্বরূপ, এটি আমার পক্ষে ভাল কাজ করে:

    NSString* text = label.text;
    CGFloat textWidth = [text sizeWithAttributes:@{NSFontAttributeName: label.font}].width;
    if (textWidth > label.frame.size.width) {
        NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
        paragraph.alignment = NSTextAlignmentCenter;
        paragraph.lineSpacing = 1.0f;
        paragraph.lineHeightMultiple = 0.75;     // Reduce this value !!!
        NSMutableAttributedString* attrText = [[NSMutableAttributedString alloc] initWithString:text];
        [attrText addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, text.length)];
        label.attributedText = attrText;
    }

6

আরও সহজে লাইনের মধ্যে সেট স্পেসের জন্য সুইফট 3 দরকারী এক্সটেনশন :)

extension UILabel
{
    func setLineHeight(lineHeight: CGFloat)
    {
        let text = self.text
        if let text = text 
        {

            let attributeString = NSMutableAttributedString(string: text)
            let style = NSMutableParagraphStyle()

           style.lineSpacing = lineHeight
           attributeString.addAttribute(NSParagraphStyleAttributeName,
                                        value: style,
                                        range: NSMakeRange(0, text.characters.count))

           self.attributedText = attributeString
        }
    }
}

5

আমি এমন একটি উপায় খুঁজে পেয়েছি যেখানে আপনি আসল লাইনের উচ্চতা সেট করতে পারেন (কোনও ফ্যাক্টর নয়) এবং এটি এমনকি ইন্টারফেস বিল্ডারে লাইভও উপস্থাপন করে । শুধু নীচের নির্দেশাবলী অনুসরণ করুন। কোডটি সুইফট 4-এ লেখা আছে ।


পদক্ষেপ # 1: নামের একটি ফাইল তৈরি করুন DesignableLabel.swiftএবং নিম্নলিখিত কোডটি সন্নিবেশ করুন:

import UIKit

@IBDesignable
class DesignableLabel: UILabel {
    @IBInspectable var lineHeight: CGFloat = 20 {
        didSet {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.minimumLineHeight = lineHeight
            paragraphStyle.maximumLineHeight = lineHeight
            paragraphStyle.alignment = self.textAlignment

            let attrString = NSMutableAttributedString(string: text!)
            attrString.addAttribute(NSAttributedStringKey.font, value: font, range: NSRange(location: 0, length: attrString.length))
            attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attrString.length))
            attributedText = attrString
        }
    }
}

পদক্ষেপ # 2:UILabel একটি স্টোরিবোর্ড / XIB এ একটি রাখুন এবং এর ক্লাসটি সেট করুন DesignableLabel। আপনার প্রকল্পটি নির্মাণের জন্য অপেক্ষা করুন (বিল্ড অবশ্যই সফল হবে!)।

আপনার ইউআইএলবেলে শ্রেণি নির্দিষ্ট করা


পদক্ষেপ 3: এখন আপনার "লাইনের উচ্চতা" নামে বৈশিষ্ট্য ফলকে একটি নতুন সম্পত্তি দেখা উচিত। আপনার পছন্দসই মানটি সেট করুন এবং ফলাফলগুলি অবিলম্বে আপনার দেখানো উচিত !

বৈশিষ্ট্যগুলিতে লাইন উচ্চতা নির্ধারণ করুন


2

এখানে ইউআইএলবেলের একটি সাবক্লাস রয়েছে যা এটি নির্ধারণ করে lineHeightMultipleএবং নিশ্চিত করে যে অভ্যন্তরীণ উচ্চতাটি পাঠ্য কেটে না ফেলতে যথেষ্ট বড়।

@IBDesignable
class Label: UILabel {
    override var intrinsicContentSize: CGSize {
        var size = super.intrinsicContentSize
        let padding = (1.0 - lineHeightMultiple) * font.pointSize
        size.height += padding
        return size
    }

    override var text: String? {
        didSet {
            updateAttributedText()
        }
    }

    @IBInspectable var lineHeightMultiple: CGFloat = 1.0 {
        didSet {
            updateAttributedText()
        }
    }

    private func updateAttributedText() {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineHeightMultiple = lineHeightMultiple
        attributedText = NSAttributedString(string: text ?? "", attributes: [
            .font: font,
            .paragraphStyle: paragraphStyle,
            .foregroundColor: textColor
        ])
        invalidateIntrinsicContentSize()
    }
}

অতিরিক্ত প্যাডিং অবশ্যই হবে (লাইনহাইটমাল্টিপল - ১.০) * ফন্ট.পয়েন্টটিসাইজ, তাই না?
পাভেল আলেক্সিভ

উপরের কোডটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে। তবে আপনি ঠিক বলেছেন। আপনি কি আপনার পরিবর্তন চেষ্টা করেছেন? @ পাভেলএলেক্সিভ
ফটম্যান

না, আমি লাইন হাইট মাল্টিপল এর পরিবর্তে লাইনস্পেসিংয়ের সাথে লেগে আছি :)
পাভেল

1

সুইফট ২.০ এ ...

একটি এক্সটেনশন যুক্ত করুন:

extension UIView {
    func attributesWithLineHeight(font: String, color: UIColor, fontSize: CGFloat, kern: Double, lineHeightMultiple: CGFloat) -> [String: NSObject] {
        let titleParagraphStyle = NSMutableParagraphStyle()
        titleParagraphStyle.lineHeightMultiple = lineHeightMultiple

        let attribute = [
            NSForegroundColorAttributeName: color,
            NSKernAttributeName: kern,
            NSFontAttributeName : UIFont(name: font, size: fontSize)!,
            NSParagraphStyleAttributeName: titleParagraphStyle
        ]
        return attribute
    }
}

এখন, কেবল আপনার ইউআইএলবেলকে বিশিষ্ট পাঠ হিসাবে সেট করুন:

self.label.attributedText = NSMutableAttributedString(string: "SwiftExample", attributes: attributesWithLineHeight("SourceSans-Regular", color: UIColor.whiteColor(), fontSize: 20, kern: 2.0, lineHeightMultiple: 0.5))    

স্পষ্টতই, আমি একগুচ্ছ প্যারামিটার যুক্ত করেছি যা আপনার প্রয়োজন হতে পারে না। চারপাশে খেলুন - পদ্ধতিটি পুনরায় লেখার জন্য নির্দ্বিধায় - আমি বিভিন্ন উত্তরগুলির একগুচ্ছ এটির জন্য সন্ধান করছিলাম যাতে অনুভূত হয় যে এটির বাইরে কাউকে সহায়তা করার ক্ষেত্রে আমি পুরো এক্সটেনশনটি পোস্ট করবো ...


1

সুইফট 3 - একটি ইউআইটিেক্সটভিউ বা ইউআইএলবেল এক্সটেনশনে এই ফাংশনটি যুক্ত করুন:

যদি আপনি ইতিমধ্যে দৃশ্যের সাথে বিশিষ্ট স্ট্রিংগুলি ব্যবহার করে থাকেন (সেগুলিকে ওভাররাইট করার পরিবর্তে) তবে বর্তমান বিশিষ্ট পাঠ্য রাখতে আমি কিছু কোড যুক্ত করেছি।

func setLineHeight(_ lineHeight: CGFloat) {
    guard let text = self.text, let font = self.font else { return }

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineSpacing = 1.0
    paragraphStyle.lineHeightMultiple = lineHeight
    paragraphStyle.alignment = self.textAlignment

    var attrString:NSMutableAttributedString
    if let attributed = self.attributedText {
        attrString = NSMutableAttributedString(attributedString: attributed)
    } else {
        attrString = NSMutableAttributedString(string: text)
        attrString.addAttribute(NSFontAttributeName, value: font, range: NSMakeRange(0, attrString.length))
    }
    attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length))
    self.attributedText = attrString
}

1

অন্য উত্তর ... আপনি যদি স্ট্রিমটিকে প্রোগ্রামগতভাবে পাস করেন তবে আপনাকে নিয়মিত স্ট্রিংয়ের পরিবর্তে একটি বিশিষ্ট স্ট্রিংটি পাস করতে হবে এবং এর স্টাইলটি পরিবর্তন করতে হবে। (আইওএস 10)

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;

1

সুইফট 3 এক্সটেনশন:

    import UIKit

extension UILabel {
    func setTextWithLineSpacing(text: String, lineHeightMultiply: CGFloat = 1.3) {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineHeightMultiple = lineHeightMultiply
        paragraphStyle.alignment = .center
        let attributedString = NSMutableAttributedString(string: text)
        attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSRange(location: 0, length: attributedString.length))
        self.attributedText = attributedString
    }
}

1

এটি এর সাথে সহায়তা করা উচিত। তারপরে আপনি স্টোরিবোর্ডের মধ্যে এই লেবেলটিকে এই কাস্টম শ্রেণিতে অর্পণ করতে পারেন এবং এর বৈশিষ্ট্যগুলির মধ্যে সরাসরি এটির পরামিতি ব্যবহার করতে পারেন:

open class SpacingLabel : UILabel {

    @IBInspectable open var lineHeight:CGFloat = 1 {
        didSet {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = 1.0
            paragraphStyle.lineHeightMultiple = self.lineHeight
            paragraphStyle.alignment = self.textAlignment

            let attrString = 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
        }
    } 
}

এটি এর সাথে সহায়তা করা উচিত। তারপরে আপনি স্টোরিবোর্ডের মধ্যে এই লেবেলটিকে এই কাস্টম শ্রেণিতে বরাদ্দ করতে পারেন এবং এর বৈশিষ্ট্যগুলির মধ্যে সরাসরি এটির পরামিতি ব্যবহার করতে পারেন।
রাসেল ওয়ারউইক

দয়া করে মন্তব্যে আপনার উত্তরের সাথে সম্পর্কিত কন্টেন্টটি রাখবেন না। আপনার উত্তরটি মন্তব্যগুলির পাঠ না করেই সহায়ক হওয়া উচিত
নিউরন

1

সুইফট 4 লেবেল এক্সটেনশন। বৈশিষ্ট্যযুক্ত পাঠ্যের জন্য অতিরিক্ত অতিরিক্ত গুণাবলী থাকা প্রয়োজন হলে কার্যক্রমে প্রবেশের আগে এনএসউটেবলঅ্যাট্রিবিউড স্ট্রিং তৈরি করা Creat

extension UILabel {

    func setLineHeightMultiple(to height: CGFloat, withAttributedText attributedText: NSMutableAttributedString) {

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 1.0
        paragraphStyle.lineHeightMultiple = height
        paragraphStyle.alignment = textAlignment

        attributedText.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedText.length - 1))

        self.attributedText = attributedText
    }
}

0

এই কোডটি আমার পক্ষে কাজ করেছে (নিশ্চিতভাবে আইওএস 7 এবং আইওএস 8)।

_label.numberOfLines=2;
_label.textColor=[UIColor whiteColor];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineHeightMultiple=0.5;
paragraphStyle.alignment = NSTextAlignmentCenter;
paragraphStyle.lineSpacing = 1.0;

NSDictionary *nameAttributes=@{
                               NSParagraphStyleAttributeName : paragraphStyle,
                               NSBaselineOffsetAttributeName:@2.0
                               };


NSAttributedString *string=[[NSAttributedString alloc] initWithString:@"22m\nago" attributes:nameAttributes];
_label.attributedText=string;

0

দ্রুত আমার সমাধান এখানে। সাবক্লাসটি বৈশিষ্ট্যযুক্ত পাঠ্য এবং পাঠ্য সম্পত্তি উভয় এবং চরিত্রস্পেসিং + লাইনস্পেসিংয়ের জন্য কাজ করা উচিত। নতুন স্ট্রিং বা অ্যাট্রিবিউটস্ট্রিং সেট করা থাকলে এটি ব্যবধানটি ধরে রাখে।

open class UHBCustomLabel : UILabel {
    @IBInspectable open var characterSpacing:CGFloat = 1 {
        didSet {
            updateWithSpacing()
        }

    }
    @IBInspectable open var lines_spacing:CGFloat = -1 {
        didSet {
            updateWithSpacing()
        }

    }
    open override var text: String? {
        set {
            super.text = newValue
            updateWithSpacing()
        }
        get {
            return super.text
        }
    }
    open override var attributedText: NSAttributedString? {
        set {
            super.attributedText = newValue
            updateWithSpacing() 
        }
        get {
            return super.attributedText
        }
    }
    func updateWithSpacing() {
        let attributedString = self.attributedText == nil ? NSMutableAttributedString(string: self.text ?? "") : NSMutableAttributedString(attributedString: attributedText!)
        attributedString.addAttribute(NSKernAttributeName, value: self.characterSpacing, range: NSRange(location: 0, length: attributedString.length))
        if lines_spacing >= 0 {
            let paragraphStyle = NSMutableParagraphStyle()
            paragraphStyle.lineSpacing = lines_spacing
            paragraphStyle.alignment = textAlignment
            attributedString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attributedString.length))
        }
        super.attributedText = attributedString
    }
}

-5

দ্রুত-নোংরা-স্মার্ট-সহজ কাজ হিসাবে:

ইউআইএলবেলগুলির জন্য যার কাছে খুব বেশি লাইন নেই আপনার পরিবর্তে স্ট্যাকভিউ ব্যবহার করতে পারেন।

  1. প্রতিটি লাইনের জন্য একটি নতুন লেবেল লিখুন।
  2. এগুলি একটি স্ট্যাকভিউতে এম্বেড করুন ((দুটি লেবেল নির্বাচন করুন -> সম্পাদক -> এম্বেড ইন -> স্ট্যাকভিউ
  3. Spacingআপনার পছন্দসই পরিমাণে স্ট্যাকভিউয়ের সামঞ্জস্য করুন

তাদের উল্লম্বভাবে স্ট্যাক করা নিশ্চিত করুন । এই সমাধানটি কাস্টম ফন্টগুলির জন্যও কাজ করে।

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


এফডাব্লুআইডাব্লু এটি একটি ভয়ঙ্কর তবুও কার্যক্ষম সমাধান। তাই আমি এটি রাখছি।
মধু

আমি গ্রাফ তৈরির জন্য আইওএস দেব স্ট্যাকভিউ ব্যবহারের একটি নীতিও দেখেছি। স্ট্যাকভিউগুলি খুব শক্তিশালী
মধু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.