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


উত্তর:


122

সম্পাদনা: স্পষ্টতই NSAttributedStringএটি আইওএস 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 একই জিনিস করেনি, কিন্তু এখন যে অবচিত করা হচ্ছে।

Reasonsতিহাসিক কারণে, এখানে আমার মূল উত্তর:

সংক্ষিপ্ত উত্তর: আপনি পারবেন না। পাঠ্য রেখার মধ্যে ব্যবধান পরিবর্তন করতে আপনাকে সাবক্লাস করতে হবে UILabelএবং নিজস্ব রোল করতে হবে drawTextInRect, একাধিক লেবেল তৈরি করতে হবে বা একটি ভিন্ন ফন্ট ব্যবহার করতে হবে (সম্ভবত একটি নির্দিষ্ট রেখার উচ্চতার জন্য সম্পাদিত একটি, ফিলিপের উত্তর দেখুন)।

দীর্ঘ উত্তর: মুদ্রণ এবং অনলাইন বিশ্বে পাঠ্যের রেখার মধ্যবর্তী স্থানটি "শীর্ষস্থানীয়" হিসাবে পরিচিত ('শিরোনাম' সহ ছড়াগুলি, এবং কয়েক দশক আগে ব্যবহৃত সীসা ধাতু থেকে এসেছে)। শীর্ষস্থানীয় হ'ল কেবলমাত্র পঠনযোগ্য সম্পত্তি UIFont, যা ৪.০ এ অবমূল্যায়ন করে প্রতিস্থাপন করা হয়েছিল lineHeight। আমি যতদূর জানি, নির্দিষ্ট পরামিতিগুলির সাথে সেট করে কোনও ফন্ট তৈরি করার উপায় নেই lineHeight; আপনি সিস্টেম ফন্ট এবং আপনার যুক্ত কোনও কাস্টম ফন্ট পাবেন তবে একবার ইনস্টল হয়ে গেলে সেগুলি টুইট করতে পারবেন না।

এর মধ্যে কোনও ব্যবধান পরামিতি নেই UILabel

আমি UILabelযেমন আচরণ করি তেমন বিশেষভাবে সন্তুষ্ট নই , তাই আমি আপনার নিজের সাবক্লাস লেখার বা তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করার পরামর্শ দিচ্ছি। এটি আপনার হরফ পছন্দ থেকে আচরণকে স্বাধীন করে তুলবে এবং সর্বাধিক পুনঃব্যবহারযোগ্য সমাধান হবে।

আমি আশা করি এর মধ্যে আরও নমনীয়তা ছিলUILabel এবং আমি ভুল প্রমাণিত হতে পেরে খুশি হব!


1
আমি এটি উপ-শ্রেণিবদ্ধকরণ ইউআইএলবেল দিয়ে করেছি, মূলত ধারণাটি হ'ল লেবেল পাঠ্যটিকে টোকেনগুলিতে ভাগ করা, এবং তারপরে প্রতিটি টোকেনের পরিচয় দৈর্ঘ্য, প্রতিটি টোকেনের জন্য একটি পৃথক লেবেল তৈরি করা এবং একের পর এক যুক্ত করা। এটাই.
ম্যাট্রিক্স

3
মিথ্যাচার! ;) লাইন উচ্চতা পরিবর্তন করতে আপনি একটি ফন্ট ফাইল প্যাচ করতে পারেন - এই পৃষ্ঠায় আমার উত্তর দেখুন।
ফিলিপ

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

NSAttributesString সঙ্গে এটি না যদি আপনি iOS> = 6. ব্যবহার উদাহরণ
d.ennis

এটি সিম্পল এবং ওয়ার্কিং ফাইন।
আর মোহন

75

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

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উদাহরণস্বরূপ লেবেলের পাঠ্য সারিবদ্ধকরণের জন্য অক্ষম ব্যবহার করে , তাই আপনাকে এটি অনুচ্ছেদ শৈলীতে যুক্ত করতে হবে।
cyborg86pl

56

আপনি স্টোরিবোর্ডে লাইনের ব্যবধান নিয়ন্ত্রণ করতে পারেন:

সদৃশ প্রশ্ন


10
তবে এক্সকোড .1.১.১-এ লেবেলটি নির্বাচন করা এবং বৈশিষ্ট্যযুক্ত প্যানেলে লাইন মান পরিবর্তন করার ফলে প্যানেলটি ঝাঁকুনি এবং অ্যাপ্লিকেশনটিকে লক করে দেবে। এক্সকোডকে জোর করে ছেড়ে দিয়ে আমি কেবল প্যানেল থেকে বেরিয়ে আসতে সক্ষম হয়েছি।
izk

4
অ্যানিমেশনটির জন্য
থাম্বস

1
সংস্করণ .1.১ এ প্যানেলটি ঝেড়ে ফেলেছে এবং রান সময়টিতে এর কোনও প্রভাব নেই। কোডে এটি করতে হয়েছিল।
মিগুয়েলস্লভ

440 ওয়াটের
বিদ্যুতটি

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/

আমাকে 'হিয়া' ব্লকে 'লাইনগ্যাপ', 'আরোহী', 'উত্সাহক' পরিবর্তন করতে হয়েছিল (ব্লগের উদাহরণ হিসাবে)।


সুপার শীতল! এই ওএস এক্স ফন্ট সরঞ্জামগুলি আমার ওটিএফ ফন্টের জন্যও কাজ করেছে (যদিও এটি কেবলমাত্র টিটিএফ নির্দিষ্ট করে ...)। আমার ফন্টের লাইন-উচ্চতা 1000 (!) ছিল, আমি এটিকে 0 এবং ভয়েলাতে পরিবর্তন করেছি। আমার প্রতিটি লাইনের পাঠ্যের নীচে মাইল এবং মাইল ফাঁকা জায়গা ছিল।
জনি

2
আমি বিশ্বাস করতে পারি না এটিই সেরা সমাধান (কোনও অপরাধ নয়!) তবে এটি সবচেয়ে সহজ। আমি আমার ফন্টগুলি সম্পাদনা করতে ফ্রি (উইন্ডোজ) সফ্টওয়্যার টাইপ লাইট (এবং ফন্ট | মেট্রিক্স | অ্যাডভান্সড আপনি লাইনগ্যাপ সংশোধন করতে পারেন) এর অধীনে ব্যবহার করেছেন । এটি আপনাকে ফন্টগুলির "নামকরণ" করতে দেয়, যা ফিলিপের উল্লিখিত সরঞ্জামটি ব্যবহার করে কীভাবে করব তা আমি বুঝতে পারি না।
কर्क ওল

এটি দুর্দান্ত ফিলিপিকে দুর্দান্ত! পোস্টের জন্য ধন্যবাদ!!
রবি

এছাড়াও আরো সুনির্দিষ্ট জন্য একটি অনুরূপ প্রশ্নের আমার উত্তর দেখুন: stackoverflow.com/a/19553827/201828
phatmann

এটি আবার অনলাইন।
ম্যাট বি।

8

এই লোকটি লাইনের উচ্চতা পেতে একটি ক্লাস তৈরি করেছে (কোরটেক্সটটি ব্যবহার না করে, এমটিবেল লাইব্রেরি হিসাবে): https://github.com/LemonCake/MSLabel


7

আমি যে সেরা জিনিসটি পেয়েছি তা হ'ল: https://github.com/mattt/TTTAttributesLabel

এটি একটি ইউআইলাবেল সাবক্লাস যাতে আপনি এটি কেবল এটিকে ফেলে দিতে পারেন এবং তারপরে রেখার উচ্চতা পরিবর্তন করতে:

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