ইউআইএলবেল সাইজের টোফিট স্বয়ংক্রিয়আউট আইও 6 নিয়ে কাজ করে না


152

আমি কীভাবে প্রোগ্রামালিকভাবে কনফিগার করব (এবং কোন পদ্ধতিতে) এমন একটি ইউআইএলবেল যার উচ্চতা তার পাঠ্যের উপর নির্ভর করবে? আমি স্টোরিবোর্ড এবং কোডের সংমিশ্রণটি ব্যবহার করে এটি সেট আপ করার চেষ্টা করেছি, তবে কোনও ফলসই হয়নি। সবাই পরামর্শ দেওয়া হচ্ছে sizeToFitযখন সেটিং lineBreakModeএবং numberOfLines। যাইহোক, কোন ব্যাপার যদি আমি যে কোড করা viewDidLoad:, viewDidAppear:অথবা viewDidLayoutSubviewsআমি এটা কাজ পেতে পারেন। হয় আমি দীর্ঘ পাঠ্যের জন্য বাক্সটিকে খুব ছোট করে তুলি এবং এটি বৃদ্ধি পায় না, বা আমি এটি আরও বড় করে তুলি এবং এটি সঙ্কুচিত হয় না।


FWIW একই কোড: আমার label.sizeToFit()এক্সকোড / ভিউকন্ট্রোলার ব্যবহার করার দরকার নেই, সীমাবদ্ধতা যথেষ্ট ছিল। খেলার মাঠে লেবেল তৈরি করা হয়নি । এখন পর্যন্ত আমি প্লেগ্রাউন্ডে কাজ করার একমাত্র label.sizeToFit()
হানি

উত্তর:


407

দয়া করে নোট করুন যে বেশিরভাগ ক্ষেত্রে ম্যাট এর সমাধান প্রত্যাশা অনুযায়ী কাজ করে। তবে যদি এটি আপনার পক্ষে কাজ করে না, দয়া করে আরও পড়ুন।

আপনার লেবেলটি স্বয়ংক্রিয়ভাবে উচ্চতার আকার পরিবর্তন করতে আপনাকে নিম্নলিখিতগুলি করতে হবে:

  1. লেবেলের জন্য বিন্যাস সীমাবদ্ধতা সেট করুন
  2. নিম্ন অগ্রাধিকার সহ উচ্চতার সীমাবদ্ধতা সেট করুন। এটি ContentCompressionResistancePriority এর চেয়ে কম হওয়া উচিত
  3. অফলাইন সংখ্যা 0 সেট করুন
  4. লেবেলের উচ্চতার অগ্রাধিকারের চেয়ে সামগ্রী হগিংপ্রিয়রিটি সেট করুন
  5. লেবেলের জন্য পছন্দসইম্যাক্স লেআউটউইথ সেট করুন এই মানটি এর উচ্চতা গণনা করতে লেবেল দ্বারা ব্যবহৃত হয়

উদাহরণ স্বরূপ:

self.descriptionLabel = [[UILabel alloc] init];
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.descriptionLabel.preferredMaxLayoutWidth = 200;

[self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addSubview:self.descriptionLabel];

NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];
[self addConstraints:constrs];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
[self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];

ইন্টারফেস বিল্ডার ব্যবহার

  1. চারটি প্রতিবন্ধকতা সেট আপ করুন। উচ্চতার সীমাবদ্ধতা বাধ্যতামূলক। এখানে চিত্র বর্ণনা লিখুন

  2. তারপরে লেবেলের বৈশিষ্ট্য পরিদর্শকের কাছে যান এবং লাইন সংখ্যা 0 তে নির্ধারণ করুন। এখানে চিত্র বর্ণনা লিখুন

  3. লেবেলের আকার পরিদর্শকের কাছে যান এবং উল্লম্ব কন্টেন্টহাগিংপ্রিয়িটি এবং উল্লম্ব কন্টেন্টকম্প্রেশনরেসনপ্রাইরিটি বাড়ান।
    এখানে চিত্র বর্ণনা লিখুন

  4. উচ্চতা সীমাবদ্ধতা নির্বাচন করুন এবং সম্পাদনা করুন।
    এখানে চিত্র বর্ণনা লিখুন

  5. এবং উচ্চতা সীমাবদ্ধতা অগ্রাধিকার হ্রাস করুন।
    এখানে চিত্র বর্ণনা লিখুন

উপভোগ করুন। :)


4
হ্যাঁ! ঠিক এই উত্তরটি আমি খুঁজছিলাম। আমার কেবলমাত্র জিনিসটি হ'ল সামগ্রী হুগিংপ্রিয়ালিটি এবং সামগ্রী বিষয়বস্তু সংক্ষেপণ প্রতিরোধের প্রয়োজনীয়তা সেট করা ছিল। আইবিতে সব করতে পারতাম! তোমাকে অনেক ধন্যবাদ.
সার্কিটলেগো

43
আপনি এই overth سوچ করছি। হয় preferredMaxLayoutWidthলেবেলের প্রস্থটি সেট করুন বা পিন করুন (বা তার ডান এবং বাম দিক)। এখানেই শেষ! এরপরে এটির বিষয়বস্তুগুলির সাথে ফিট করার জন্য এটি স্বয়ংক্রিয়ভাবে বৃদ্ধি এবং উলম্বভাবে সঙ্কুচিত হবে।
ম্যাট

আমাকে পছন্দসইম্যাক্স লেআউটউইথ প্রস্থ সম্পত্তি + লেবেলের প্রস্থকে পিন করতে হবে।
মোহন

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

2
Finally এবং অবশেষে আমি কেন খুঁজে পেতে পারি তা উল্লেখ করার মতো কারণ, আপনার যখন সেলটি দেখার নীচে আটকে থাকবে তখন আপনাকে "নীচে" সীমাবদ্ধতার কম অগ্রাধিকার সেট করতে হবে তবে আমি এটি 7৫০ এ রেখেছি এবং সবকিছু নিখুঁতভাবে কাজ করছে। আমি ধারণা এটি সঙ্কুচিত।
ম্যাথিজস সেগার্স

65

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

আরও জটিল ক্ষেত্রে কেবল লেবেলটি সেট করুন preferredMaxLayoutWidth

যেভাবেই হোক, সঠিক জিনিসটি স্বয়ংক্রিয়ভাবে ঘটে।


12
আপনারও নম্বরটি অফলাইন 0 তে সেট করতে হবে তা নিশ্চিত করতে হবে অন্যথায় আপনি মোড়ানো হবে না।
ডিভনগোভেট

2
এটি আমার পক্ষে যথেষ্ট ছিল না। @ মার্কের উত্তর থেকেও পয়েন্ট 2 দরকার।
দানিয়াল আয়তেকিন

কোডগুলি না লিখে বিভিন্ন লাইনে স্বয়ংক্রিয়ভাবে লেবেল বাড়ানোও কি সম্ভব?
নূর

এটি গৃহীত উত্তরের চেয়ে অনেক কম জটিল। আমি এই উত্তরটি চিত্রিত করে দুটি উদাহরণ তৈরি করেছি ( এখানে এবং এখানে )।
সুরগাচ

@ সুরগ এই সীমাবদ্ধতা ব্যবহার করে কাজ করে। তবে এটি প্লেগ্রাউন্ডে একই কোডের জন্য কাজ করে না । খেলার মাঠে আপনার অবশ্যই থাকতে হবেlabel.sizeToFit()
মধু

42

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

প্রথম জিনিসটি ভুলে যাওয়া sizeToFit। স্বতঃ লেআউট আপনার পক্ষে অভ্যন্তরীণ সামগ্রীর আকারের উপর ভিত্তি করে এটি পরিচালনা করবে।

সুতরাং সমস্যাটি হ'ল, অটো লেআউটতে এটির সামগ্রীতে লেবেল কীভাবে পাবেন? বিশেষত - কারণ প্রশ্নটির উল্লেখ - উচ্চতা। নোট করুন যে একই নীতিগুলি প্রস্থে প্রযোজ্য।

সুতরাং আসুন একটি উদাহরণ দিয়ে শুরু করা যাক ইউিলাবেল যার উচ্চতা 41px উচ্চে সেট করা আছে:

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

আপনি উপরে স্ক্রিন দখল দেখতে পাচ্ছেন, "This is my text"উপরে এবং নীচে প্যাডিং রয়েছে। এটি ইউআইএলবেলের উচ্চতার মধ্যে প্যাডিং এবং এটি লিখিত বিষয়বস্তু।

যদি আমরা সিমুলেটরটিতে অ্যাপটি চালাই, তবে নিশ্চিত, আমরা একই জিনিসটি দেখতে পাই:

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

এখন, ইন্টারফেস বিল্ডারে ইউআইএলবেল নির্বাচন করুন এবং আকার পরিদর্শকের ডিফল্ট সেটিংসটি একবার দেখুন:

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

উপরে হাইলাইট হওয়া সীমাবদ্ধতা নোট করুন। এটি বিষয়বস্তু আলিঙ্গন অগ্রাধিকার । যেমন এরিকা সাদুন এটিকে চমত্কার আইওএস অটো লেআউট ডেমাইসাইডে বর্ণনা করেছেন , এটি হ'ল:

যেভাবে ভিউ তার মূল সামগ্রীর চারপাশে অতিরিক্ত প্যাডিং এড়াতে পছন্দ করে

আমাদের জন্য, ইউআইএলবেল সহ মূল বিষয়বস্তু হ'ল পাঠ্য।

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

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

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

সুতরাং আসুন এটি একবার যেতে দিন। আমার উচ্চতার সীমাবদ্ধতার 1000 টির অগ্রাধিকার রয়েছে , যা প্রয়োজনীয় । সামগ্রী আলিঙ্গনের উচ্চতা 250 , যা দুর্বল । যদি আমরা উচ্চতার সীমাবদ্ধতা অগ্রাধিকার 249 এ কম করি তবে কী হবে ?

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

এখন আমরা ম্যাজিকটি ঘটতে শুরু করতে দেখতে পাচ্ছি। আসুন সিমটিতে চেষ্টা করুন:

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

অসাধারণ! সামগ্রী জড়িয়ে ধরেছে। শুধুমাত্র উচ্চতার অগ্রাধিকার 249 বিষয়বস্তু আলিঙ্গন অগ্রাধিকার 250 এর চেয়ে কম । মূলত, আমি বলছি "উচ্চতা আমি এখানে উল্লেখ আমি যা বিষয়বস্তু গাঢ় আলিঙ্গন জন্য নির্দিষ্ট করে থাকেন কম গুরুত্বপূর্ণ" । সুতরাং, সামগ্রী আলিঙ্গন জিতল।

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

পাঠকের জন্য অনুশীলন হিসাবে প্রস্থের সমতুল্য করা ছেড়ে দেবে!


3
আপনার দুর্দান্ত ব্যাখ্যার জন্য অনেক ধন্যবাদ! অবশেষে আমি বিষয়বস্তু আলিঙ্গন অগ্রাধিকার বুঝতে পারি।
কর্নিক্স

আপনি দয়া করে ব্যাখ্যা করতে পারেন বিষয়বস্তু সংক্ষেপণ প্রতিরোধের অগ্রাধিকার কী? ধন্যবাদ!
কর্নিক্স

2
উত্তরের উত্তর সর্বাধিক! সেভাবে কাজ করা লাইনের সংখ্যা সীমিত করার জন্য কি কোনও উপায় আছে?
রাফেলজুজো

7

আইওএস size আকারে লক্ষ্য করা হয়েছে তোফিটও কাজ করছে না - সম্ভবত সমাধানটি আপনাকেও সহায়তা করতে পারে

[textView sizeToFit];
[textView layoutIfNeeded];

1
@ রাম্বাটিনো এটি আমার পক্ষে কাজ করে। layoutIfNeededআপনার দরকার হলে যুক্ত করুন setNeedsUpdateConstraints। তবে পরিস্থিতি কিছুটা আলাদা হতে পারে।
Gon

আমি যখন পপওভার করি তখন এটি আমার পক্ষে সবচেয়ে ভাল কাজ করে। আমার প্রথমে বিন্যাসটি নেওয়া দরকার, তবে
জেসন

4

লেবেলের পছন্দের ম্যাক্স লেআউটউইথটি নিশ্চিত করার জন্য অন্য একটি বিকল্প লেবেলের প্রস্থের সাথে সিঙ্কে রাখা হয়েছে:

#import "MyLabel.h"

@implementation MyLabel

-(void)setBounds:(CGRect)bounds
{
    [super setBounds:bounds];

    // This appears to be needed for iOS 6 which doesn't seem to keep
    // label preferredMaxLayoutWidth in sync with its width, which 
    // means the label won't grow vertically to encompass its text if 
    // the label's width constraint changes.
    self.preferredMaxLayoutWidth = self.bounds.size.width;
}

@end

4

আমি মনে করি সঠিক সমাধান খুঁজতে আমার কিছুটা সময় লেগেছিল বলে আমার অবদান রাখা উচিত:

  • লক্ষ্যটি হ'ল অটো লেআউটটিকে কখনও সাইজটোফিট () কল না করেই এটির কাজটি করতে দেওয়া উচিত, আমরা সঠিক সীমাবদ্ধতাগুলি উল্লেখ করে এটি করব:
  • আপনার ইউআইএলবেলে শীর্ষ, নীচে এবং শীর্ষস্থানীয় / পিছনে স্থান সীমাবদ্ধতা নির্দিষ্ট করুন
  • লাইনের বৈশিষ্ট্যের সংখ্যা 0 তে সেট করুন
  • কন্টেন্ট আলিঙ্গন অগ্রাধিকার 1000 এ বৃদ্ধি করুন
  • সামগ্রী সংক্ষেপণ প্রতিরোধ অগ্রাধিকার 500 এ কম করুন
  • আপনার নীচের ধারক সীমাবদ্ধতার উপর, অগ্রাধিকারটি 500 এ কম করুন

মূলত, যা হয় তা হ'ল আপনি আপনার ইউআইএলবেলকে বলছেন যে এটির নির্দিষ্ট উচ্চতার সীমাবদ্ধতা থাকা সত্ত্বেও, বিষয়টিকে আলিঙ্গন করার জন্য এটি নিজেকে আরও ছোট করার সীমাবদ্ধতাটি ভেঙে ফেলতে পারে (উদাহরণস্বরূপ যদি আপনার একক লাইন থাকে) তবে এটি পারবেন না এটিকে আরও বড় করার জন্য প্রতিবন্ধকতা ভঙ্গ করুন।


3

আমার ক্ষেত্রে আমি একটি ইউআইভিউ সাবক্লাস তৈরি করছিলাম যাতে একটি ইউআইএলবেল রয়েছে (অজানা দৈর্ঘ্যের)। আইওএস 7-তে কোডটি সোজা ছিল: সীমাবদ্ধতাগুলি সেট করুন, সামগ্রী আলিঙ্গন বা সংক্ষেপণ প্রতিরোধের বিষয়ে চিন্তা করবেন না এবং সবকিছু প্রত্যাশা অনুযায়ী কাজ করেছিল।

তবে আইওএস 6-এ ইউআইএলবেল সর্বদা একটি লাইনে ক্লিপড ছিল। উপরের কোনও উত্তরই আমার পক্ষে কার্যকর হয়নি। সামগ্রী আলিঙ্গন এবং সংক্ষেপণ প্রতিরোধের সেটিংস উপেক্ষা করা হয়েছিল। ক্লিপিং প্রতিরোধকারী একমাত্র সমাধান হ'ল লেবেলে পছন্দসই ম্যাক্সলয়আউটউইথকে অন্তর্ভুক্ত করা। তবে পছন্দসই প্রস্থটি কী সেট করতে হবে তা আমি জানতাম না, কারণ এর প্যারেন্ট ভিউয়ের আকারটি অজানা ছিল (প্রকৃতপক্ষে, এটি বিষয়বস্তু দ্বারা সংজ্ঞায়িত করা হবে)।

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

- (void)layoutSubviews
{
    // Autolayout hack required for iOS6
    [super layoutSubviews];
    self.bodyLabel.preferredMaxLayoutWidth = self.bodyLabel.frame.size.width;
    [super layoutSubviews];
}

এটি আমার সঠিক দৃশ্যের ছিল ... কখনও কখনও আপনি একা নন তা জানতে পেরে ভাল লাগবে।
ডেভম্যাক

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

3

আমি UILabelপ্রোগ্রামগতভাবে যুক্ত করেছি এবং আমার ক্ষেত্রে এটি যথেষ্ট ছিল:

label.translatesAutoresizingMaskIntoConstraints = false
label.setContentCompressionResistancePriority(UILayoutPriorityRequired, forAxis: .Vertical)
label.numberOfLines = 0

2

আমি xCode6 দিয়ে সমাধান করেছি স্বয়ংক্রিয়ভাবে "পছন্দসই প্রস্থ" রেখে লেবেলের শীর্ষে পিন করে, শীর্ষস্থানীয় এবং অনুসরণ করছে এখানে চিত্র বর্ণনা লিখুন


0
UIFont *customFont = myLabel.font;
CGSize size = [trackerStr sizeWithFont:customFont
                             constrainedToSize:myLabel.frame.size // the size here should be the maximum size you want give to the label
                                 lineBreakMode:UILineBreakModeWordWrap];
float numberOfLines = size.height / customFont.lineHeight;
myLabel.numberOfLines = numberOfLines;
myLabel.frame = CGRectMake(258, 18, 224, (numberOfLines * customFont.lineHeight));

0

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

যাইহোক, আমার জন্য যা কাজ করেছিল তা ছিল ইউআইএলবেলের জন্য প্রয়োজনীয় উচ্চতার সীমাবদ্ধতা যুক্ত করা এবং যখন আন্তঃসৌনিকসাইজ বলা হয় তখন এটিকে ম্যানুয়ালি সঠিক উচ্চতায় সেট করা ছিল। আপনার যদি অন্য ইউআইভিউতে ইউআইএলবেল থাকে না, আপনি প্রথমে উচ্চতার সীমাবদ্ধতা নির্ধারণ করে এবং তারপরে
[সুপার ইনস্ট্রিনসিক কনটেন্টসাইজ] ফিরিয়ে একটি অনুরূপ বাস্তবায়ন সরবরাহ করতে পারেন ; পরিবর্তে [self.containerview অন্তর্নিহিত কনটেন্টসাইজ]; যেমন আমি নীচে করি যা আমার ইউআইভিউ সাব্লাসের জন্য নির্দিষ্ট।

- (CGSize)intrinsicContentSize
{
    CGRect expectedTextBounds = [self.titleLabel textRectForBounds:self.titleLabel.bounds limitedToNumberOfLines:1];
    self.titleLabelHeightConstraint.constant = expectedTextBounds.size.height;
    return [self.containerView intrinsicContentSize];

}

আইওএস 7 এবং আইওএস 8 এ এখন পুরোপুরি কাজ করে।


এটি লক্ষণীয় যে আপনি যদি নিজের দৃষ্টিভঙ্গিটি সঠিকভাবে সেট আপ করে থাকেন (যেমন আপনার সীমাবদ্ধতাগুলি সঠিক এবং আপনি দৃশ্যের জীবনচক্রের সঠিক পর্যায়ে সমস্ত কিছু সেট আপ করেছেন), আপনার কখনই ওভাররাইড করা উচিত নয় intrinsicContentSize। রানটাইমটি আপনার সঠিকভাবে সেটআপ করার সীমাবদ্ধতার উপর ভিত্তি করে এটি গণনা করতে সক্ষম হওয়া উচিত।
জন রজারস

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

... তবে [সুপার আন্তঃসংযোগসাইজ] এর যত্ন নেওয়া উচিত, আমি যা বলছি তা হ'ল। আপনি যদি নিজের অটো লেআউটটি সঠিকভাবে প্রয়োগ করে থাকেন।
জন রজারস

0

একটি সমাধান যা আমার পক্ষে কাজ করেছিল; আপনার UILabel একটি নির্দিষ্ট প্রস্থ থাকে, তাহলে থেকে বাধ্যতা পরিবর্তন constant =করতে constant <=আপনার ইন্টারফেস ফাইলের মধ্যে

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


-1

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

আপনি এটি আপনার সূচনাতে জাগ্রত করতে পারেন

self.tableView.rowHeight = UITableViewAutomaticDimension.  

স্টোরিবোর্ডে, ঘরটি নির্বাচন করুন, আকার পরিদর্শকটি খুলুন এবং নিশ্চিত করুন যে 'কাস্টম' চেকবক্সটি পরীক্ষা করে সারি উচ্চতা "ডিফল্ট" এ সেট করা আছে।

8.0-তে একটি সমস্যা রয়েছে যার কোডও সেট করা দরকার।

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