যদিও প্রশ্নটি প্রোগ্রামগতভাবে জানিয়েছে, একই সমস্যাটির মুখোমুখি হওয়া এবং ইন্টারফেস বিল্ডারে কাজ করা পছন্দ করা, আমি ভেবেছিলাম এটি একটি ইন্টারফেস বিল্ডার সমাধানের সাথে বিদ্যমান উত্তরগুলিতে যুক্ত করা দরকারী।
প্রথম জিনিসটি ভুলে যাওয়া sizeToFit
। স্বতঃ লেআউট আপনার পক্ষে অভ্যন্তরীণ সামগ্রীর আকারের উপর ভিত্তি করে এটি পরিচালনা করবে।
সুতরাং সমস্যাটি হ'ল, অটো লেআউটতে এটির সামগ্রীতে লেবেল কীভাবে পাবেন? বিশেষত - কারণ প্রশ্নটির উল্লেখ - উচ্চতা। নোট করুন যে একই নীতিগুলি প্রস্থে প্রযোজ্য।
সুতরাং আসুন একটি উদাহরণ দিয়ে শুরু করা যাক ইউিলাবেল যার উচ্চতা 41px উচ্চে সেট করা আছে:
আপনি উপরে স্ক্রিন দখল দেখতে পাচ্ছেন, "This is my text"
উপরে এবং নীচে প্যাডিং রয়েছে। এটি ইউআইএলবেলের উচ্চতার মধ্যে প্যাডিং এবং এটি লিখিত বিষয়বস্তু।
যদি আমরা সিমুলেটরটিতে অ্যাপটি চালাই, তবে নিশ্চিত, আমরা একই জিনিসটি দেখতে পাই:
এখন, ইন্টারফেস বিল্ডারে ইউআইএলবেল নির্বাচন করুন এবং আকার পরিদর্শকের ডিফল্ট সেটিংসটি একবার দেখুন:
উপরে হাইলাইট হওয়া সীমাবদ্ধতা নোট করুন। এটি বিষয়বস্তু আলিঙ্গন অগ্রাধিকার । যেমন এরিকা সাদুন এটিকে চমত্কার আইওএস অটো লেআউট ডেমাইসাইডে বর্ণনা করেছেন , এটি হ'ল:
যেভাবে ভিউ তার মূল সামগ্রীর চারপাশে অতিরিক্ত প্যাডিং এড়াতে পছন্দ করে
আমাদের জন্য, ইউআইএলবেল সহ মূল বিষয়বস্তু হ'ল পাঠ্য।
এখানে আমরা এই প্রাথমিক দৃশ্যের কেন্দ্রবিন্দুতে এসেছি। আমরা আমাদের পাঠ্য লেবেলটিকে দুটি সীমাবদ্ধতা দিয়েছি। তারা বিরোধ। একটি বলে "উচ্চতা অবশ্যই 41 পিক্সেল উচ্চের সমান" । অন্যটি বলেছেন "এর সামগ্রীতে ভিউটি আলিঙ্গন করুন যাতে আমাদের কোনও অতিরিক্ত প্যাডিং না থাকে" । আমাদের ক্ষেত্রে, ভিউটিকে এর পাঠ্যে আলিঙ্গন করুন যাতে আমাদের কোনও অতিরিক্ত প্যাডিং না থাকে।
এখন অটো লেআউট সহ দুটি ভিন্ন নির্দেশনা যা বিভিন্ন কাজ করে বলে, রানটাইমকে একটি বা অন্যটি বেছে নিতে হবে। এটি উভয় করতে পারে না। ইউআইএলবেল উভয়ই 41 পিক্সেল উচ্চ হতে পারে এবং কোনও প্যাডিং নেই।
এটি যেভাবে সমাধান করা হয়েছে তা হল অগ্রাধিকার নির্দিষ্ট করে। একটি নির্দেশের অন্যটির তুলনায় উচ্চতর অগ্রাধিকার থাকতে হবে। উভয় নির্দেশাবলী যদি আলাদা আলাদা জিনিস বলে এবং একই অগ্রাধিকার থাকে তবে একটি ব্যতিক্রম ঘটবে।
সুতরাং আসুন এটি একবার যেতে দিন। আমার উচ্চতার সীমাবদ্ধতার 1000 টির অগ্রাধিকার রয়েছে , যা প্রয়োজনীয় । সামগ্রী আলিঙ্গনের উচ্চতা 250 , যা দুর্বল । যদি আমরা উচ্চতার সীমাবদ্ধতা অগ্রাধিকার 249 এ কম করি তবে কী হবে ?
এখন আমরা ম্যাজিকটি ঘটতে শুরু করতে দেখতে পাচ্ছি। আসুন সিমটিতে চেষ্টা করুন:
অসাধারণ! সামগ্রী জড়িয়ে ধরেছে। শুধুমাত্র উচ্চতার অগ্রাধিকার 249 বিষয়বস্তু আলিঙ্গন অগ্রাধিকার 250 এর চেয়ে কম । মূলত, আমি বলছি "উচ্চতা আমি এখানে উল্লেখ আমি যা বিষয়বস্তু গাঢ় আলিঙ্গন জন্য নির্দিষ্ট করে থাকেন কম গুরুত্বপূর্ণ" । সুতরাং, সামগ্রী আলিঙ্গন জিতল।
নীচের লাইনটি, পাঠ্যের সাথে মানানসই লেবেল পাওয়া উচ্চতা - বা প্রস্থ - সীমাবদ্ধতা নির্দিষ্ট করার মতো সহজ এবং সেই অক্ষটির বিষয়বস্তু আলিঙ্গন অগ্রাধিকারের সীমাবদ্ধতার সাথে মিল রেখে সেই অগ্রাধিকারটিকে সঠিকভাবে সেট করা যায়।
পাঠকের জন্য অনুশীলন হিসাবে প্রস্থের সমতুল্য করা ছেড়ে দেবে!
label.sizeToFit()
এক্সকোড / ভিউকন্ট্রোলার ব্যবহার করার দরকার নেই, সীমাবদ্ধতা যথেষ্ট ছিল। খেলার মাঠে লেবেল তৈরি করা হয়নি । এখন পর্যন্ত আমি প্লেগ্রাউন্ডে কাজ করার একমাত্রlabel.sizeToFit()