ইউআইএসট্যাকভিউতে মাল্টলাইন লেবেল


154

মাল্টিলাইন লেবেল (ওয়ার্ড র‌্যাপে লাইনব্রেক সেট সহ) স্ট্যাক ভিউতে রাখার সময়, লেবেলটি সাথে সাথে লাইনব্রেকটি হারাবে এবং পরিবর্তে এক লাইনে লেবেল পাঠ্য প্রদর্শন করবে।

কেন এটি হচ্ছে এবং কোনও স্ট্যাক ভিউয়ের মধ্যে কীভাবে একাধিক লাইনের লেবেল সংরক্ষণ করে?


1
আপনি কি লাইনের সংখ্যা 0 তে সেট করেছেন?
ডাসডম

আপনি কি উত্তর খুঁজে পেয়েছেন?
ব্রেন্ডেন

উত্তর:


204

সঠিক উত্তরটি এখানে:
https://stackoverflow.com/a/43110590/566360


  1. এর UILabelভিতরে একটি এম্বেড করুন UIView(সম্পাদক -> এম্বেড ইন -> দেখুন)
  2. এর সাথে মানানসই সীমাবদ্ধতাগুলি ব্যবহার UILabelকরুন UIView(উদাহরণস্বরূপ, পিছনে স্থান, শীর্ষ স্থান এবং তদারকির সীমাবদ্ধতার জন্য শীর্ষস্থানীয় স্থান)

UIStackViewবাড়িয়ে দেবে UIViewসঠিকভাবে মাপসই এবং UIViewসীমাবদ্ধ হবে UILabelএকাধিক লাইনের জন্য।


36
এটি এত বোকা তবে এটি কাজ করে! ধন্যবাদ মানুষ ! সম্ভবত একদিন অ্যাপল এমন কিছু প্রকাশ করবে যা তাদের এসডিকে অর্ধেক ভাঙ্গা নয় ...
গিলিয়াম এল।

1
ওহ মানুষ! তুমি ত্রাণকর্তা! আমি এটি কয়েক ঘন্টা ছিলাম :) অ্যাট্রিবিউটস ইন্সপেক্টরটিতে লাইনগুলি 0 তে সেট করার কথা মনে রাখবেন, ঠিক এটি অনুপস্থিত ছিল।
এবসিন

8
এই কার্যসংক্রান্ত নেই, সঠিক সমাধান এখানে stackoverflow.com/a/43110590/566360
vietstone

2
অনুভূমিক প্রান্তিককরণটি কেন্দ্রে পরিবর্তনের জন্য আমার পক্ষে যথেষ্ট ছিল। কোন UIViewশেননিগান প্রয়োজন নেই।
শিম

1
@ লুসিইন এই উত্তরটিতে যা বলেছিল ঠিক তেমনটাই। তবে সঠিক উত্তরটি এখানে: স্ট্যাকওভারফ্লো.com
অ্যান্ডি

144

একটি অনুভূমিক স্ট্যাক ভিউয়ের জন্য যা UILabelইন্টারফেস বিল্ডারে প্রথমে সেট করে এর মতামতগুলির একটি হিসাবে এটি রয়েছে label.numberOfLines = 0। এটিতে লেবেলটিকে 1 টির বেশি লাইন থাকতে দেওয়া উচিত। প্রথমদিকে যখন স্ট্যাক ভিউটি ছিল তখন এটি আমার পক্ষে কাজ করতে ব্যর্থ হয়েছিল stackView.alignment = .fill। এটি সহজভাবে কাজ করতে stackView.alignment = .center। লেবেলটি এখন একাধিক লাইনে প্রসারিত করতে পারে UIStackView

অ্যাপল ডকুমেন্টেশন বলেছেন

ভরাট সারিবদ্ধকরণ ব্যতীত অন্য সারিবদ্ধকরণের জন্য, স্ট্যাকের অক্ষের সাথে লম্ব লম্বরের গণনা করার সময় স্ট্যাক ভিউ প্রতিটি সাজানো ভিউর অভ্যন্তরীণ সামগ্রী আকার বৈশিষ্ট্যটি ব্যবহার করে

এখানে শব্দ বাদে নোট করুন। যখন .fillঅনুভূমিক ব্যবহৃত হয় তখন UIStackViewসাজানো সাবউভিউ আকারগুলি ব্যবহার করে উল্লম্বভাবে নিজেকে আকার পরিবর্তন করে না।


3
হ্যাক ছাড়া এটি সঠিক সমাধান। দস্তাবেজগুলি পড়া সর্বদা বন্ধ হয়ে যায়!
ইসলাম Q.

3
এটি গ্রহণযোগ্য সমাধান হওয়া উচিত। ইউআইভিউয়ের সাথে কাজ করার সাথে সাথে ইউিলাবেলের পাঠ্যটি আমার ক্ষেত্রে অন্য একটি মতামত জুড়ে ভেসে উঠল।

14
এটি আসলে কাজ করে না ... আমার স্ট্যাকভিউতে আমার 3 টি লেবেল রয়েছে। আমি শূন্যের রেখা এবং কেন্দ্রে প্রান্তিককরণ সেট করেছি ... আমি এখনও দেখছি লেবেলগুলি কেটে গেছে।
ম্যাটারগোয়াল

11
এটি .alignmentইউআইএসট্যাকভিউয়ের যেটি আপনাকে ইউআইএলবেল .fill নয় , কিছুতে সেট করতে হবে যা দেওয়া উদাহরণে কিছুটা বিভ্রান্তিকর label.alignment = .center। আমি মনে করি এটি হওয়া উচিতstackView.alignment = .center
ae14

2
তবে আমি উল্লম্ব স্ট্যাকভিউতে কীভাবে একাধিক লাইন ইউআইএলএবলভিউ কাজ করতে পারি?
ডিকন

42
  • প্রথমে 0 টি লাইনের লেবেল নম্বর সেট করুন
  • আপনি multiLineযদি একটি নির্দিষ্ট প্রস্থ না দেন তবে স্ট্যাক ভিউ এখনও বাড়বে না । যখন আমরা এর প্রস্থ স্থির করি তখন যখন প্রস্থটি দেখানো হয়েছে তখন এটি মাল্টলাইনে বিভক্ত হবে:

স্ক্রিন রেকর্ডিং

যদি আমরা স্ট্যাক ভিউতে একটি নির্দিষ্ট প্রস্থ না দিয়ে থাকি তবে জিনিসগুলি দ্বিধাগ্রস্ত হয়। আর কতক্ষণ লেবেলের সাথে স্ট্যাক ভিউ বাড়বে (যদি লেবেলের মানটি গতিশীল হয়)?

আশা করি এটি আপনার সমস্যার সমাধান করতে পারে।


3
স্ট্যাক ভিউয়ের প্রস্থ স্থির না করা থাকলে তার পরিবর্তে ডিভাইসের (যেমন সুপারভাইজের) প্রস্থের সাথে আনুপাতিক।
আউটআউই উইন্ডেন্ড

হ্যাঁ, আমাদেরও আনুপাতিক প্রস্থ থাকতে পারে। বিন্দুটি হ'ল লেবেলটিকে কিছু প্রস্থের পরে ভেঙে ফেলতে হবে তবে যা সংজ্ঞায়িত করা দরকার।
ইরফান

আপনি নির্দিষ্ট করতে পারেন @AnandKumar preferredMaxLayoutWidthমধ্যে viewDidLayoutSubviewsআপনার লেবেলের জন্য UIViewControllerঅথবা layoutSubviewsআপনি উপশ্রেণী UIView
শাইনিজ কাসিমভ 11

4
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল, স্ট্যাকভিউয়ের পুরো পয়েন্টটি স্ট্যাকভিউ এবং এর উপাদানগুলির মধ্যে সীমাবদ্ধতা যুক্ত করতে হবে না ...
হানি

4
একটি স্থির মান প্রদান অটলেআউটের উদ্দেশ্যকে পরাভূত করে
ইসলাম প্র।

17

ইউআইএলবেলে পছন্দসইম্যাক্স লেআউটউইথকে সেট করা আমার পক্ষে কাজ করেছিল

self.myLabel.preferredMaxLayoutWidth = self.bounds.size.width;

3
এটি আমার বইয়ের সঠিক উত্তর। যখনই আপনি ইউআইএলবেলের সাথে জগাখিচুড়ি করেন এবং একাধিক লাইন পরিচালনা করতে হয় তখন আপনাকে এটিকে পছন্দসই ম্যাক্সলয়আউটউইথ দিতে হবে। এটি এগুলি ছাড়া কার্যকর হতে পারে তবে জিনিসগুলি এগুলি ছাড়া খুব দ্রুত মজাদার হয়ে উঠতে পারে।
মফ

2
সবগুলিই সমস্ত উত্তর চেষ্টা করে এবং সেগুলি আপনার ব্যতীত অন্যায় ছিল। ধন্যবাদ!
levan

এটি আমার সমস্যার পুরোপুরি সমাধান করেছে এবং হ্যাকি কম মনে করে, ধন্যবাদ।
ইথান ঝাও

আপনার উত্তরের জন্য ধন্যবাদ! আমার ক্ষেত্রে আমার স্ট্যাকভিউয়ের প্রান্তিককরণটি ইতিমধ্যে সেট করা ছিল .centerএবং ইউআইভিউ-র ভিতরে আমার সত্যিই আমার লেবেলের প্রয়োজন নেই।
ফারিজা ঝুমাত

12

লেবেলের জন্য অ্যাট্রিবিউট ইন্সপেক্টরটিতে কেবল লাইন সংখ্যা 0 নির্ধারণ করুন। এটা আপনার জন্য কাজ করবে।

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


12
উল্লম্ব স্ট্যাকভিউয়ের জন্য, এটি কাজ করার জন্য আপনার কাছে বিতরণটি "পূরণ" করতে হবে।
স্নোপিপ্রোটোকল

2
"পূরণ" এ বিতরণ সেট করা ঠিক করার জন্য কী।
ডিলান মুর

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

8

উপরের সমস্ত পরামর্শ দেওয়ার পরেও আমি পেয়েছি ইউআইএসট্যাকভিউয়ের জন্য কোনও বৈশিষ্ট্য পরিবর্তনের প্রয়োজন নেই। আমি কেবল নিম্নলিখিত হিসাবে ইউআইএলবেলগুলির বৈশিষ্ট্যগুলি পরিবর্তন করেছি (লেবেলগুলি ইতিমধ্যে উল্লম্ব স্ট্যাক ভিউতে যুক্ত করা হয়েছে):

সুইফট 4 উদাহরণ:

    [titleLabel, subtitleLabel].forEach(){
        $0.numberOfLines = 0
        $0.lineBreakMode = .byWordWrapping
        $0.setContentCompressionResistancePriority(UILayoutPriority.required, for: .vertical)
    }

5

আমার জন্য ম্যাজিক ট্রিকটি ছিল একটিতে সেট widthAnchorকরা UIStackView

সেট leadingAnchorএবং trailingAnchorনা করবে না কাজ, কিন্তু সেটিং centerXAnchorএবং widthAnchorUILabel প্রদর্শন সঠিকভাবে প্রণীত।


4

আইওএস 9+

[textLabel sizeToFit]UILabel এর পাঠ্য সেট করার পরে কল করুন।

সাইজ টোফিট পছন্দসই ম্যাক্সউইথ ব্যবহার করে মাল্টলাইন লেবেলটিকে পুনরায় বিন্যাস করবে। লেবেল স্ট্যাকভিউকে পুনরায় আকার দেবে, যা ঘরের আকার পরিবর্তন করবে। সামগ্রী ভিউতে স্ট্যাক ভিউ পিন করার পাশাপাশি কোনও অতিরিক্ত বাধাও প্রয়োজন।


4

এখানে স্বয়ংক্রিয় উচ্চতা সহ UIStackViewবহুরেখার সমন্বয়ে উল্লম্বের সম্পূর্ণ উদাহরণ রয়েছে UILabel

লেবেলগুলি স্ট্যাকভিউয়ের প্রস্থের ভিত্তিতে মোড়ানো এবং স্ট্যাকভিউয়ের উচ্চতা লেবেলের মোড়ানো উচ্চতার ভিত্তিতে। (এই পদ্ধতির সাথে আপনার একটিতে লেবেল এম্বেড করার দরকার নেই UIView)) (সুইফ্ট 5, আইওএস 12.2)

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

// A vertical stackview with multiline labels and automatic height.
class ThreeLabelStackView: UIStackView {
    let label1 = UILabel()
    let label2 = UILabel()
    let label3 = UILabel()

    init() {
        super.init(frame: .zero)
        self.translatesAutoresizingMaskIntoConstraints = false
        self.axis = .vertical
        self.distribution = .fill
        self.alignment = .fill

        label1.numberOfLines = 0
        label2.numberOfLines = 0
        label3.numberOfLines = 0
        label1.lineBreakMode = .byWordWrapping
        label2.lineBreakMode = .byWordWrapping
        label3.lineBreakMode = .byWordWrapping
        self.addArrangedSubview(label1)
        self.addArrangedSubview(label2)
        self.addArrangedSubview(label3)

        // (Add some test data, a little spacing, and the background color
        // make the labels easier to see visually.)
        self.spacing = 1
        label1.backgroundColor = .orange
        label2.backgroundColor = .orange
        label3.backgroundColor = .orange
        label1.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi."
        label2.text = "Hello darkness my old friend..."
        label3.text = "When I wrote the following pages, or rather the bulk of them, I lived alone, in the woods, a mile from any neighbor, in a house which I had built myself, on the shore of Walden Pond, in Concord, Massachusetts, and earned my living by the labor of my hands only."
    }

    required init(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
}

এটি একটি নমুনা ViewControllerএটি ব্যবহার করে।

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let myLabelStackView = ThreeLabelStackView()
        self.view.addSubview(myLabelStackView)

        // Set stackview width to its superview.
        let widthConstraint  = NSLayoutConstraint(item: myLabelStackView, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.width, multiplier: 1, constant: 0)
        self.view.addConstraints([widthConstraint])
    }
}

3

যোগ UIStackViewসম্পত্তি,

stackView.alignment = .fill
stackView.distribution = .fillProportionally
stackView.spacing = 8.0
stackView.axis = .horizontal

ভিতরে লেবেল যুক্ত করার পরিবর্তে UIViewযা প্রয়োজন হয় না UITableViewCellI


3

নীচে একটি এর ভিতরে একটি লাইন বিরতি সহ মাল্টি-লাইন লেবেলের একটি খেলার মাঠ বাস্তবায়ন রয়েছে UIStackView। এটি UILabelঅভ্যন্তরীণ যে কোনও কিছু এম্বেড করার প্রয়োজন নেই এবং এটি এক্সকোড 9.2 এবং সুইফট 4 দিয়ে পরীক্ষা করা হয়েছে আশা করি এটি সহায়ক helpful

import UIKit
import PlaygroundSupport

let containerView = UIView()
containerView.frame = CGRect.init(x: 0, y: 0, width: 400, height: 500)
containerView.backgroundColor = UIColor.white

var label = UILabel.init()
label.textColor = .black
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "This is an example of sample text that goes on for a long time. This is an example of sample text that goes on for a long time."

let stackView = UIStackView.init(arrangedSubviews: [label])
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .vertical
stackView.distribution = .fill
stackView.alignment = .fill
containerView.addSubview(stackView)
stackView.centerXAnchor.constraint(equalTo: containerView.centerXAnchor).isActive = true
stackView.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
stackView.widthAnchor.constraint(equalTo: containerView.widthAnchor).isActive = true
stackView.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true

PlaygroundPage.current.liveView = containerView

1

সিস্টেমের বিন্যাসে এটিকে সংক্ষিপ্তসারগুলি আঁকার জন্য উত্স, প্রস্থ এবং উচ্চতা নির্ধারণ করা উচিত, এক্ষেত্রে আপনার সমস্ত পূর্বরূপের একই অগ্রাধিকার রয়েছে, এটি বিন্দুতে দ্বন্দ্ব তৈরি করে, বিন্যাস সিস্টেমটি ভিউগুলির মধ্যে নির্ভরতা জানেন না, যা প্রথম, দ্বিতীয় এবং আরও আঁকায়

আপনার স্ট্যাক ভিউটি অনুভূমিক বা উল্লম্ব এবং কোনটি একাধিক রেখায় পরিণত হতে চান তার উপর নির্ভর করে সেট স্ট্যাক সাবভিউগুলি সংক্ষেপণ একাধিক লাইনের সাথে সমস্যার সমাধান করবে। stackOtherSubviews .setContentCompressionResistancePriority(.defaultHight, for: .horizontal) lblTitle.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)


0

আমার ক্ষেত্রে, আমি পূর্ববর্তী পরামর্শগুলি অনুসরণ করেছি, তবে আমার পাঠ্যটি কেবলমাত্র ল্যান্ডস্কেপ সত্ত্বেও একটি একক লাইনে ছাঁটা হচ্ছে। দেখা যাচ্ছে, আমি \0লেবেলের পাঠ্যে একটি অদৃশ্য নাল চরিত্র খুঁজে পেয়েছি যা অপরাধী ছিল। এটি অবশ্যই sertedোকানো ইম ড্যাশ প্রতীকটির সাথে অবশ্যই চালু করা হয়েছিল। এটি আপনার ক্ষেত্রেও ঘটছে কিনা তা দেখতে, আপনার লেবেলটি নির্বাচন করতে এবং এর পাঠ্যটি পরীক্ষা করতে দেখুন ডিবাগারটি দেখুন use


0

এক্সকোড 9.2:

স্ট্রিংবোর্ডটি সেট করার পরে অদ্ভুত দেখাবে। প্রকল্প চালানোর চিন্তা করবেন না। চলার সময় আপনার স্টোরিবোর্ড সেটআপ অনুসারে সমস্ত কিছু পুনরায় আকার দেবে। আমি মনে করি স্টোরবোর্ডে এটির মতো বাগ। এখানে চিত্র বর্ণনা লিখুন

টিপস: সর্বশেষে "লাইনারের সংখ্যা 0" এ সেট করুন। আপনি যখন অন্য কোনও ভিউ সম্পাদনা করতে চান এবং পুনরায় সম্পাদনা করার পরে 0 তে সেট করুন reset

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


0

আমার জন্য কি কাজ!

স্ট্যাকভিউ: প্রান্তিককরণ: ভরাট, বিতরণ: পূরণ, সুপারভাইজার প্রান্তের সীমাবদ্ধ আনুপাতিক প্রস্থ 0.8,

লেবেল: কেন্দ্র এবং লাইন = 0


0

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

স্ক্রিনশট ইউইলবেল অটোশ্রিং সেটিংস


একটি কোড উদাহরণ সহ আপনার উত্তর উন্নতি বিবেচনা করুন।
ফ্রিডু

1
@ ফ্রিডো সেটিংসের একটি স্ক্রিনশট যুক্ত করেছে।
মিশাল মন্ডাক


0

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

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