আপনি iOS8 এর টেবিলভিউগুলিতে দুর্দান্ত নতুন বৈশিষ্ট্যের পার্শ্ব প্রতিক্রিয়াটির মুখোমুখি হচ্ছেন: স্বয়ংক্রিয় সারি উচ্চতা He
আইওএস 7-এ, আপনার কাছে হয় একটি নির্দিষ্ট আকারের সারি (সেট করা tableView.rowHeight
) ছিল, অথবা আপনি আপনার ঘরের উচ্চতা গণনা করার জন্য কোড লিখবেন এবং আপনি এটিতে ফিরে আসতে চাইবেন tableView:heightForRowAtIndexPath
। কোনও ঘরের উচ্চতার গণনার জন্য রাইটিং কোডটি বেশ জটিল হতে পারে যদি আপনার ঘরের মধ্যে অনেকগুলি মতামত থাকে এবং বিভিন্ন ফন্টের আকারে আপনার আলাদা উচ্চতা থাকে। ডায়নামিক টাইপ যুক্ত করুন এবং প্রক্রিয়াটি পাছায় ব্যথা হচ্ছিল।
আইওএস 8-এ, আপনি এখনও উপরের কাজগুলি করতে পারেন, তবে এখন সারিগুলির উচ্চতা আইওএস দ্বারা নির্ধারণ করা যেতে পারে, তবে শর্ত থাকে যে আপনি স্বয়ংক্রিয় বিন্যাস ব্যবহার করে আপনার ঘরের সামগ্রীটি কনফিগার করেছেন। এটি বিকাশকারীদের পক্ষে বিশাল উপকার, কারণ গতিশীল ফন্টের আকার পরিবর্তন হওয়ার সাথে সাথে বা ব্যবহারকারী অ্যাক্সেসিবিলিটি সেটিংস ব্যবহার করে পাঠ্যের আকার পরিবর্তন করে, আপনার ইউআই নতুন আকারের সাথে অভিযোজিত হতে পারে। এর অর্থ হ'ল যদি আপনার কাছে এমন কোনও ইউআইএলবেল থাকে যাতে একাধিক সারি পাঠ্য থাকতে পারে, আপনার ঘরটি যখন কোষগুলির প্রয়োজন হয় তখন তাদের সংযোজন করতে বাড়তে পারে এবং এটি যখন না ঘটে তখন সঙ্কুচিত হয়, তাই কোনও অপ্রয়োজনীয় শ্বেত স্থান নেই।
আপনি যে সতর্কতা বার্তাটি দেখছেন তা আপনাকে জানিয়ে দিচ্ছে যে অটো লেআউটটির জন্য আপনার ঘরের পর্যাপ্ত বাধা নেই কক্ষের উচ্চতার টেবিল ভিউটি জানান।
গতিশীল কক্ষের উচ্চতা ব্যবহার করার জন্য, যা ইতিমধ্যে অন্যান্য পোস্টারগুলির দ্বারা উল্লিখিত কৌশলগুলি সহ, এই বার্তাটি থেকেও মুক্তি পাবে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার ঘরের ইউআই আইটেমগুলি ঘরের উপরের এবং নীচে বাঁধতে যথেষ্ট সীমাবদ্ধতা রয়েছে । আপনি যদি আগে অটো লেআউট ব্যবহার করেন তবে আপনি সম্ভবত শীর্ষ + শীর্ষস্থানীয় সীমাবদ্ধতাগুলি সেট করতে অভ্যস্ত তবে গতিশীল সারির উচ্চতার জন্য নীচের সীমাবদ্ধতাও প্রয়োজন।
লেআউট পাসটি এ জাতীয়ভাবে কাজ করে যা একটি ঘরের মধ্যে স্ক্রিনে প্রদর্শিত হওয়ার আগেই ঘটে,
অভ্যন্তরীণ মাপযুক্ত সামগ্রীর জন্য মাত্রা গণনা করা হয়। এটিতে ইউআইএলবেলস এবং ইউআইআইজেজভিউগুলি অন্তর্ভুক্ত রয়েছে, যেখানে তাদের মাত্রা যথাক্রমে পাঠ্য বা ইউআইআইমেজগুলির মধ্যে রয়েছে তার উপর ভিত্তি করে। এই উভয় মতামতই তাদের প্রস্থকে একটি পরিচিত হিসাবে বিবেচনা করবে (কারণ আপনি অনুসরণ / অগ্রণী প্রান্তগুলির জন্য সীমাবদ্ধতা স্থির করেছেন, বা আপনি স্পষ্ট প্রশস্ততা স্থাপন করেছেন, বা আপনি অনুভূমিক সীমাবদ্ধতাগুলি ব্যবহার করেছেন যা অবশেষে পাশ থেকে পাশের প্রস্থ প্রকাশ করে)। ধরা যাক একটি লেবেলে পাঠ্যের একটি অনুচ্ছেদ রয়েছে ("লাইনের সংখ্যা" 0 তে সেট করা হয়েছে যাতে এটি স্বয়ংক্রিয়ভাবে মোড়ানো হবে), এটি কেবল 310 পয়েন্ট হতে পারে, সুতরাং এটি বর্তমান ফন্টের আকারে 120 পয়েন্ট উচ্চ হতে নির্ধারিত।
আপনার অবস্থানের সীমাবদ্ধতা অনুসারে ইউআই তৈরি করা হয়েছে। লেবেলের নীচে একটি সীমাবদ্ধতা রয়েছে যা ঘরের নীচে মার্জিনের সাথে সংযোগ স্থাপন করে। যেহেতু লেবেলটি 120 পয়েন্ট লম্বা হয়ে উঠেছে, এবং যেহেতু এটি সীমাবদ্ধতার দ্বারা ঘরের নীচে আবদ্ধ রয়েছে, তাই আবশ্যকীয় প্রতিরোধের জন্য এটি "নীচে" (ঘরের উচ্চতা বৃদ্ধি করা) কোষটি চাপতে হবে যা "নীচে" বলে লেবেলটি সর্বদা ঘরের নীচ থেকে মান দূরত্ব।
আপনি যে ত্রুটি বার্তাটি প্রতিবেদন করেছেন তা ঘটে যদি নীচের সীমাবদ্ধতাটি অনুপস্থিত থাকে, তবে সেই ক্ষেত্রে ঘরের উপরের দিক থেকে ঘরের নীচে "ধাক্কা" দেওয়ার মতো কিছু নেই, যা জানা গেছে যে অস্পষ্টতা: নীচে থেকে নীচের দিকে চাপ দেওয়ার মতো কিছুই নেই শীর্ষে, ঘরটি ধসে পড়ে। তবে অটো লেআউট এটি সনাক্ত করে এবং মানক সারির উচ্চতা ব্যবহার করে ফিরে আসে।
এটির জন্য মূল্যবান এবং বেশিরভাগ ক্ষেত্রে একটি উত্তর রয়েছে, আপনি যদি আইওএস 8 এর অটো লেআউট-ভিত্তিক গতিশীল সারি উচ্চতা বাস্তবায়ন করেন তবে আপনার প্রয়োগ করা উচিত tableView:estimatedHeightForRowAtIndexPath:
। এই অনুমানের পদ্ধতিটি আপনার কক্ষগুলির জন্য মোটামুটি মান ব্যবহার করতে পারে এবং টেবিলের দৃশ্যটি প্রথমে লোড করা হলে এটি ডাকা হবে। এটি ইউআইকিটকে স্ক্রোলবারের মতো জিনিসগুলি আঁকতে সহায়তা করে, যা টেবিলভিউটি এটি জানতে পারে না যে এটি কীভাবে কন্টেন্টের মধ্য দিয়ে স্ক্রোল করতে পারে তবে পুরোপুরি সঠিক আকারের দরকার নেই, কারণ এটি কেবল একটি স্ক্রোলবার। এটি প্রকৃত সারির উচ্চতার গণনাটি সেলের প্রয়োজনীয় মুহুর্তের আগ পর্যন্ত স্থগিত করতে দেয় যা কম কম্পিউটেশনাল নিবিড় এবং আপনার ইউআইটিএবলভিউকে দ্রুত উপস্থাপন করতে দেয়।