অটলেআউট ব্যবহার করে সাবউভিউগুলি পরিবর্তনশীল পরিবর্তনের পরে তদারকির পুনরায় আকার দিন


83

আমি এই আকার পরিবর্তনকারী তত্ত্বাবধানের ঝুলন্ত godশ্বরের প্রতি ভালবাসা পেতে পারি না।

আমার UIView *superview সাথে একটি 4 আছে UILabels। 2 জন অন্যের জন্য শিরোনাম হিসাবে 2 ফাংশন।

4 টির মধ্যে থাকা সামগ্রীর ডেটাবেস থেকে গতিশীল।

SizeToFitবনাম SizeThatFits:(CGSize)বনাম UIView systemLayoutSizeFittingSize:, হয় পাস UILayoutFittingCompressedSizeবা হয় UILayoutFittingExpandedSize

আমি অগ্রেআউটআউটটি প্রোগ্রামক্রমে ব্যবহার করি এবং তদারকির উচ্চতাটি ডামি সংখ্যার সমান বা ততোধিক সেট করি।

কোথায় এবং কিভাবে আমি এই ব্যবহার করবেন SizeToFitবনাম sizeThatFits:(CGSize)বনাম UIView systemLayoutSizeFittingSize:, ক্ষণস্থায়ী পারেন UILayoutFittingCompressedSizeবা UILayoutFittingExpandedSize। আমি এখানে স্ট্যাকের জন্য প্রচুর টিপস পড়েছি তবে কিছুই দিয়ে শেষ হয়নি।

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

আমি আমার .. চুলের চুল আঁচড়াচ্ছি


4
আরে, আপনি কি পেস্টবিনে কোথাও আপনার কোড পোস্ট করতে পারেন বা যদি আমি একবার দেখতে পারি তবে? আমিও একই রকম সমস্যায় ভুগছি। এক সপ্তাহ বা তারও বেশি সময় কেটে গেছে।
এশ

উত্তর:


104

আপনি যদি অটো লেআউট ব্যবহার করছেন তবে আপনার যা করা দরকার তা এখানে:

  1. নিশ্চিত হয়ে নিন যে আপনি আপনার যে কোনও সাবউভিউতে স্থির প্রস্থ এবং / বা উচ্চতার সীমাবদ্ধতা যোগ করছেন না (আপনি কোন মাত্রা (গুলি) গতিশীল আকারে চান তার উপর নির্ভর করে)। ধারণাটি হ'ল প্রতিটি সাবউউয়ের অভ্যন্তরীণ সামগ্রীর আকারটি সাবউউয়ের উচ্চতা নির্ধারণ করতে দেয়। UILabelএর সাথে 4 টি স্বয়ংক্রিয় অন্তর্নিহিত প্রতিবন্ধকতা রয়েছে যা লেবেলের ফ্রেমের ভিতরে থাকা সমস্ত পাঠকে ফিট করার জন্য সঠিক আকারে রাখার চেষ্টা করবে (প্রয়োজনীয় অগ্রাধিকারের চেয়ে কম সহ)।

  2. নিশ্চিত হয়ে নিন যে প্রতিটি লেবেলের প্রান্তগুলি একে অপরের প্রান্ত এবং তাদের তত্ত্বাবধানের সাথে দৃ .়ভাবে (প্রয়োজনীয় অগ্রাধিকারের সীমাবদ্ধতার সাথে) সংযুক্ত রয়েছে। আপনি নিশ্চিত করতে চান যে আপনি যদি একটি লেবেল আকারে বাড়ার কল্পনা করেন তবে এটি অন্যান্য লেবেলগুলিকে এটির জন্য জায়গা তৈরি করতে বাধ্য করবে এবং সর্বাগ্রে তত্ত্বাবধানটিও প্রসারিত করতে বাধ্য করবে।

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

এটাই. আপনাকে কল করার sizeToFitবা systemLayoutSizeFittingSize:এটি কাজ করার দরকার নেই, কেবল নিজের দর্শন লোড করুন এবং পাঠ্যটি সেট করুন এবং এটি হওয়া উচিত। সিস্টেম সজ্জা ইঞ্জিন আপনার সীমাবদ্ধতাগুলি সমাধান করার জন্য গণনাগুলি করবে। (যদি কিছু setNeedsLayoutহয় তবে আপনাকে সুপারভিউতে কল করার দরকার হতে পারে ... তবে এটির প্রয়োজন হবে না))


ধন্যবাদ স্মাইলিবার্গ আমি একটি প্রকল্পের মাঝামাঝি ছিলাম এবং আপনি যা কিছু করেন তা বেশিরভাগ ক্ষেত্রেই পাইনি A এখন আমি প্রোগ্রামগতভাবে এবং বিশেষত বাধাগুলির সাথে আরও কিছু কাজ করার সুযোগ constraintsWithVisualFormatপেয়েছি এবং সম্পূর্ণরূপে পর্যবেক্ষণগুলি প্রসারিত করা এবং সুপারভাইভটিকে তার আকারের দিকে ঠেলে দেওয়া সম্পর্কে আপনার বক্তব্যটি আমি সম্পূর্ণভাবে পেয়েছি :) আবার ধন্যবাদ
পেড্রোইনপিস

আমি সমাধানের সাথে একমত, তবে এটি আমার পক্ষে কাজ করছে না, স্ট্যাকওভারফ্লো.com
ওমর

এই উত্তরটি যাদু। আমার মতামতগুলি দেখতে দেখতে খুব কম প্রচেষ্টা।
ক্রিস

4
এটি উল্লেখ করা উচিত যে আপনি translatesAutoresizingMaskIntoConstraints = NOxib ব্যবহার করছেন যদি আপনার সেট করা উচিত ।
কুডোসিসি 27'17

অনুবাদআউটরিজিংমাস্কআইন্টো কনস্ট্রাইনস = আমার মামলার কোনও উত্তর নেই। তবে এখন কনটেইনার ভিউটি হারিয়ে গেছে এবং এর উত্স সর্বদা (0,0), আমি এটি আমার পছন্দ মতো জায়গায় রাখতে পারি না। stackoverflow.com/questions/45548372/…
করিম

24

ধারক দর্শন ব্যবহার করুন

নিম্নলিখিত উদাহরণে আমার একটি 30x30 চিত্র রয়েছে এবং UILabelএটি স্থানধারক পাঠ্যের সাথে থাকা ভিউয়ের চেয়ে ছোট। চিত্রটির কমপক্ষে বৃহত্তর হওয়ার জন্য আমার ধারণকৃত ভিউটি প্রয়োজন, তবে মাল্টি-লাইন পাঠ্য ধারণ করার জন্য এটির বৃদ্ধি হওয়া দরকার।

ভিজ্যুয়াল ফর্ম্যাটে অভ্যন্তরীণ পাত্রে এটির মতো দেখাচ্ছে:

H:|-(15.0)-[image(30.0)]-(15.0)-[label]-(15.0)-|
V:|[image(30.0)]|
V:|[label(>=30.0)]|

তারপরে, লেবেলের উচ্চতা মেলাতে উপস্থিত ভিউ সেট করুন। এখন এতে থাকা ভিউ লেবেলের আকারের উপরে চলে যাবে।

@ সিমিলিবার্গ তাঁর উত্তরে যেমন উল্লেখ করেছেন, কন্টেন্টটিকে তদারকির সাথে দৃ connect়তার সাথে সংযোগ স্থাপনের ফলে লেআউট ইঞ্জিনকে অবহিত করা হয় যে সাধারণ ধারক দর্শনটি এটি বাড়ার কারণ হতে পারে।

হলুদ প্রান্তিককরণ আয়তক্ষেত্রগুলি

আপনি যদি চান আপনার হলদুটি সাজানোর আয়তক্ষেত্রগুলি -UIViewShowAlignmentRects YESআপনার স্কিমের রান আর্গুমেন্টের তালিকায় যুক্ত করে।

ইউআইএলবেল এটি বহু-লাইন


12
-UIViewShowAlignmentRects YES- দুর্দান্ত টিপ!
রালফোনসো

4
এই ক্ষেত্রে, ধারকটিকে কেবল তার উচ্চতাটিকে লেবেলের সাথে মানিয়ে নিতে হবে। যদি ধারকটি একাধিক দর্শনের উচ্চতার যোগফলের সাথে খাপ খাইয়ে দেয় তবে কী হবে?
দা রোচা পাইরেস

7

আইওএস in-এ স্ট্যাক ভিউয়ের প্রবর্তনের মাধ্যমে এটি নাটকীয়ভাবে সহজতর করা হয়েছিল your আপনার সমস্ত আকারের আকার বদলে দেওয়ার জন্য আপনার ভিউয়ের ভিতরে একটি স্ট্যাক ভিউ ব্যবহার করুন এবং তারপরে কেবল কল করুন

view.setNeedsUpdateConstraints()
view.updateConstraintsIfNeeded()
view.setNeedsLayout()
view.layoutIfNeeded()

আপনার সামগ্রী পরিবর্তন করার পরে। তারপরে আপনি কল করে আপনার নতুন আকারটি পেতে পারেন

view.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)

যদি আপনাকে কখনও দেখার জন্য প্রয়োজনীয় সঠিক আকারটি গণনা করতে হয়।


4
আমি স্ট্যাকভিউটি ব্যবহার করছি এবং গতিশীলরূপে ভিউগুলি যুক্ত করছি, এই মতামতগুলি পুনরায় আকার দেওয়া হচ্ছে না @ @ জ্যাকবুরথ
মনসুউ ....

6

এটি প্রায়শই @ স্মাইলিবার্গের উত্তর অনুসরণ করে এবং একটি দৃ concrete় উদাহরণ সহ আসে।

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

সমস্ত প্রতিবন্ধকতাগুলি বর্ণনা করবে না, তবে ইউআই অবজেক্টগুলির উচ্চতার গণনার সাথে সম্পর্কিত।

  1. [লেবেল] লেবেলগুলির একটি নির্দিষ্ট heightসীমাবদ্ধতা থাকা উচিত নয় , এই ক্ষেত্রে, অটোলআউটটি পাঠ্যের সাথে মানানসই লেবেলের আকার পরিবর্তন করবে না, তাই এজ সীমাবদ্ধতা নির্ধারণ করা মূল is (সবুজ তীর)
  2. [সাবভিউ] 1 এবং 3 পদক্ষেপগুলি অনুসরণ করা খুব সহজ তবে এই পদক্ষেপটি ভুল বোঝাবুঝি হতে পারে। লেবেলের ক্ষেত্রে যেমন সাবউভিউগুলিতে heightসীমাবদ্ধতা সেট করা উচিত নয় । সমস্ত সাবভিউতে topসীমাবদ্ধতা উপেক্ষা bottomকরে অবশ্যই বাধা সেট থাকতে হবে , যা আপনাকে রানটাইমের সময় অসন্তুষ্ট বাধা ব্যতিক্রম করবে বলে মনে করতে পারে, তবে আপনি যদি bottomসর্বশেষ মতামতের জন্য সীমাবদ্ধতা সেট করেন তবে তা হবে না । এটি করতে না পারা লেআউটটি ফুটিয়ে তুলবে। (লাল তীর)

  3. [সুপারভিউ] আপনার যেভাবে প্রয়োজন সমস্ত প্রতিবন্ধকতা সেট করুন তবে heightসীমাবদ্ধতার দিকে বড় মনোযোগ দিন । এটিকে এলোমেলো মান নির্ধারণ করুন, তবে এটি alচ্ছিক করুন, অটোলআউটটি সংক্ষিপ্তসারগুলি মানানসই উচ্চতা নির্ধারণ করবে। (নীল তীর)

এটি নিখুঁতভাবে কাজ করে, কোনও অতিরিক্ত সিস্টেম-লেআউট আপডেট পদ্ধতিগুলি কল করার দরকার নেই।


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