টিএল; ডিআর: পড়া পছন্দ করেন না? গিটহাবের সরাসরি নমুনা প্রকল্পগুলিতে ঝাঁপুন:
ধারণামূলক বিবরণ
আপনি যে আইওএস সংস্করণটির জন্য বিকাশ করছেন তা বিবেচনা না করে নীচের প্রথম 2 টি পদক্ষেপ প্রযোজ্য।
1. সেট আপ করুন এবং সীমাবদ্ধতা যুক্ত করুন
আপনার UITableViewCell
সাবক্লাসে, সীমাবদ্ধতাগুলি যুক্ত করুন যাতে ঘরের সাবউভিউগুলি তাদের প্রান্তটি কক্ষের কন্টেন্টভিউ (সবচেয়ে গুরুত্বপূর্ণভাবে উপরের এবং নীচের প্রান্তে) প্রান্তগুলিতে পিন করে দেয় । দ্রষ্টব্য: সেলটিতে নিজের মতামতগুলি পিন করবেন না; শুধু সেল এর contentView
! এই সংক্ষিপ্তসারগুলির অভ্যন্তরীণ সামগ্রীর আকারটি প্রতিটি সাবউভিউয়ের জন্য উল্লম্ব মাত্রায় সামগ্রী সংক্ষেপণ প্রতিরোধের এবং সামগ্রী আলিঙ্গন সীমাবদ্ধতাগুলি আপনি যুক্ত করেছেন এমন উচ্চ-অগ্রাধিকারের সীমাবদ্ধতাগুলিকে ওভাররাইড করা হচ্ছে না তা নিশ্চিত করে টেবিল ভিউ সেলটির সামগ্রী ভিউটির উচ্চতা চালায় । ( হুঁ? এখানে ক্লিক করুন। )
মনে রাখবেন, ধারণাটি হ'ল যে ঘরের সাবভিউগুলি ঘরের সামগ্রীর দৃশ্যের সাথে উল্লম্বভাবে সংযুক্ত করা উচিত যাতে তারা "চাপ প্রয়োগ করতে" এবং সামগ্রীগুলির দৃষ্টিভঙ্গিগুলি তাদের ফিট করার জন্য প্রসারিত করতে পারে। কয়েকটি সাবভিউ সহ উদাহরণ সেলটি ব্যবহার করা, এখানে আপনার সীমাবদ্ধতার কিছু (সমস্ত নয়!) দেখতে কী প্রয়োজন হবে তার চাক্ষুষ চিত্রণ এখানে দেওয়া হয়েছে :
আপনি কল্পনা করতে পারেন যে উপরের উদাহরণ কক্ষে মাল্টি-লাইনের বডি লেবেলে আরও পাঠ্য যুক্ত করা হয়েছে, তাই পাঠ্যের সাথে মানানসইভাবে এটি উল্লম্বভাবে বৃদ্ধি করা দরকার যা কোষটি উচ্চতার আকারে বাড়তে কার্যকরভাবে বাধ্য করবে। (অবশ্যই, এটি সঠিকভাবে কাজ করার জন্য আপনার প্রতিবন্ধকতাগুলি সঠিকভাবে পাওয়া দরকার!)
আপনার প্রতিবন্ধকতাগুলি ঠিকঠাক করা অটো লেআউটের সাথে কাজ করে ডায়নামিক সেল হাইট পাওয়ার পক্ষে সর্বাপেক্ষা শক্ত এবং গুরুত্বপূর্ণ অংশ । আপনি যদি এখানে কোনও ভুল করে থাকেন তবে এটি অন্য সমস্ত কিছু কাজ করা থেকে বিরত রাখতে পারে - তাই আপনার সময় নিন! আমি কোডে আপনার প্রতিবন্ধকতাগুলি সেট আপ করার পরামর্শ দিচ্ছি কারণ আপনি জানেন ঠিক কোথায় কোন সীমাবদ্ধতা যুক্ত হচ্ছে এবং যখন সমস্যাগুলি ভুল হয় তখন ডিবাগ করা খুব সহজ। কোডে সীমাবদ্ধতা যুক্ত করা লেআউট অ্যাঙ্করগুলি ব্যবহার করে বা ইন্টারফেস বিল্ডারের চেয়ে আরও শক্তিশালী এবং গিটহাবটিতে উপলব্ধ একটি দুর্দান্ত ওপেন সোর্স এপিআইয়ের তুলনায় আরও শক্তিশালী হতে পারে।
- আপনি যদি
updateConstraints
কোডটিতে সীমাবদ্ধতাগুলি যুক্ত করেন তবে আপনার ইউআইটিএবলভিউসেল সাবক্লাসের পদ্ধতি থেকে একবারে এটি করা উচিত । নোটটি updateConstraints
একবারে একাধিকবার বলা হতে পারে, সুতরাং একই প্রতিবন্ধকতা একাধিকবার এড়াতে এড়াতে, আপনার সীমাবদ্ধতা যুক্তকরণ কোডটি updateConstraints
বুলিয়ান সম্পত্তি হিসাবে পরীক্ষা করার জন্য আবদ্ধ করার বিষয়টি নিশ্চিত করুন didSetupConstraints
(যা আপনি আপনার সীমাবদ্ধতা চালানোর পরে YES এ সেট করেছেন) -এডিং কোড একবার)। অন্যদিকে, আপনার যদি এমন কোড রয়েছে যা বিদ্যমান সীমাবদ্ধতাগুলিকে আপডেট করে (যেমন constant
কিছু সীমাবদ্ধতার উপর সম্পত্তি সামঞ্জস্য করে ), এটিকে updateConstraints
চেকের বাইরে রাখুন didSetupConstraints
যাতে পদ্ধতিটি বলা হওয়ার সময় এটি চালানো যেতে পারে।
2. অনন্য সারণী দেখুন ঘর পুনরায় ব্যবহার সনাক্তকারীদের নির্ধারণ করুন
কক্ষের প্রতিটি অনন্য সেট বাধার জন্য, একটি অনন্য ঘর পুনরায় ব্যবহার শনাক্তকারী ব্যবহার করুন। অন্য কথায়, যদি আপনার কোষে একাধিক অনন্য লেআউট থাকে তবে প্রতিটি অনন্য লেআউটটির নিজস্ব পুনরায় ব্যবহারের শনাক্তকারী পাওয়া উচিত। (আপনার সেল ভেরিয়েন্টে আলাদা আলাদা সংখ্যার মতামত রয়েছে বা সাবউভিউগুলি একটি আলাদা ফ্যাশনে সাজানো হয়েছে এমন একটি ভাল ইঙ্গিত যা আপনাকে নতুন পুনরায় ব্যবহারের শনাক্তকারী ব্যবহার করতে হবে))
উদাহরণস্বরূপ, আপনি যদি প্রতিটি ঘরে একটি ইমেল বার্তা প্রদর্শন করে থাকেন তবে আপনার পক্ষে 4 টি অনন্য লেআউট থাকতে পারে: কেবলমাত্র একটি বিষয়যুক্ত বার্তা, একটি বিষয় এবং একটি বডি সহ বার্তা, কোনও বিষয়যুক্ত একটি বার্তা এবং একটি ফটো সংযুক্তি, এবং কোনও বিষয় সহ বার্তা, শরীর এবং ফটো সংযুক্তি এটির জন্য প্রতিটি বিন্যাসের সম্পূর্ণ পৃথক বাধা থাকে, তাই একবার সেলটি শুরু হয়ে যায় এবং এই ঘরের কোনও ধরণের জন্য সীমাবদ্ধতা যুক্ত হয়ে গেলে, সেই ঘরের ক্ষেত্রে নির্দিষ্ট কোনও অনন্য পুনরায় ব্যবহার শনাক্তকারীটি সেলে নেওয়া উচিত। এর অর্থ আপনি যখন পুনঃব্যবহারের জন্য কোনও কক্ষ অনুসন্ধান করেছেন তখন সীমাবদ্ধতাগুলি ইতিমধ্যে সংযোজন করা হয়েছে এবং সেই ধরণের ঘরের জন্য প্রস্তুত হতে প্রস্তুত।
নোট করুন যে অন্তর্নিহিত সামগ্রীর আকারের পার্থক্যের কারণে, একই সীমাবদ্ধতা (প্রকার) সহ কক্ষগুলিতে এখনও বিভিন্ন উচ্চতা থাকতে পারে! বিভিন্ন আকারের সামগ্রীর কারণে বিভিন্ন গণনা করা ভিউ ফ্রেম (অভিন্ন সীমাবদ্ধতাগুলি থেকে সমাধান করা) সহ মৌলিকভাবে বিভিন্ন লেআউটগুলি (বিভিন্ন সীমাবদ্ধতা) গুলিয়ে ফেলবেন না।
- একই পুনঃব্যবহারের পুলগুলিতে সম্পূর্ণ পৃথক বাধার সাথে কক্ষগুলি যুক্ত করবেন না (যেমন একই পুনরায় ব্যবহারের শনাক্তকারী ব্যবহার করুন) এবং তারপরে পুরানো সীমাবদ্ধতাগুলি সরিয়ে ফেলার চেষ্টা করুন এবং প্রতিটি স্তরের পরে স্ক্র্যাচ থেকে নতুন সীমাবদ্ধতা স্থাপন করুন। অভ্যন্তরীণ অটো লেআউট ইঞ্জিনটি সীমাবদ্ধতায় বড় আকারের পরিবর্তনগুলি হ্যান্ডেল করার জন্য ডিজাইন করা হয়নি এবং আপনি প্রচুর পারফরম্যান্সের সমস্যাগুলি দেখতে পাবেন।
আইওএস 8 - স্ব-আকারের আকারের ঘরগুলির জন্য
3. সারি উচ্চতা অনুমান সক্ষম করুন
সেল্ফ-সাইজিং টেবিল ভিউ সেলগুলি সক্ষম করতে, আপনাকে অবশ্যই সারণী দর্শনটির সারিটি হাইট সম্পত্তিটি ইউআইটিএবলভিউআউটোমেটিক মাত্রায় সেট করতে হবে। আপনাকে আনুমানিকরোহাইট সম্পত্তিকেও একটি মান নির্ধারণ করতে হবে। এই দুটি বৈশিষ্ট্য সেট হওয়ার সাথে সাথেই সিস্টেমটি সারিটির প্রকৃত উচ্চতা গণনা করতে অটো লেআউট ব্যবহার করে
অ্যাপল: সেল্ফ-সাইজিং টেবিল ভিউ সেলগুলির সাথে কাজ করা
আইওএস ৮ এর সাহায্যে অ্যাপল আইওএস ৮ এর পূর্বে আপনার দ্বারা কার্যকর করা অনেক কাজ অভ্যন্তরীণ করে তুলেছে the স্ব-আকার দেওয়ার সেল প্রক্রিয়াটি কাজ করতে দেওয়ার জন্য, আপনাকে প্রথমে rowHeight
টেবিলের দৃশ্যে সম্পত্তিটি স্থির করে রাখতে হবে UITableViewAutomaticDimension
। তারপরে, আপনাকে কেবল সারণি প্রদর্শনের estimatedRowHeight
সম্পত্তিটি কোনও ননজারো মানতে সেট করে সারি উচ্চতা অনুমান সক্ষম করতে হবে , উদাহরণস্বরূপ:
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 44.0; // set to whatever your "average" cell height is
এটি যা করে তা হ'ল যেগুলি এখনও অনস্ক্রিনে নেই এমন কোষগুলির সারি উচ্চতার জন্য অস্থায়ী অনুমান / স্থানধারীর সাথে সারণী দর্শন সরবরাহ করে। তারপরে, যখন এই ঘরগুলি স্ক্রিনে স্ক্রোল করতে চলেছে, আসল সারি উচ্চতা গণনা করা হবে। প্রতিটি সারির প্রকৃত উচ্চতা নির্ধারণ করতে, টেবিল ভিউ স্বয়ংক্রিয়ভাবে প্রতিটি কক্ষকে contentView
কন্টেন্ট ভিউয়ের ज्ञিত নির্দিষ্ট প্রস্থের (যা টেবিল দর্শনের প্রস্থের উপর ভিত্তি করে, কোনও বিভাগ সূচকের মতো বিয়োগ কোনও অতিরিক্ত জিনিসকে বিয়োগ করে) তার উচ্চতার কী উচ্চতা প্রয়োজন তা জিজ্ঞাসা করে বা অ্যাকসেসরির ভিউ) এবং স্বয়ংক্রিয় বিন্যাসের সীমাবদ্ধতাগুলি আপনি ঘরের সামগ্রীর ভিউ এবং সাবউভিউগুলিতে যুক্ত করেছেন। একবার এই প্রকৃত ঘরের উচ্চতা নির্ধারণ করা হয়ে গেলে, সারিটির জন্য পুরানো আনুমানিক উচ্চতাটি নতুন আসল উচ্চতার সাথে আপডেট করা হয় (এবং টেবিল দর্শনের সামগ্রীর আকার / বিষয়বস্তুআফসেটের কোনও সামঞ্জস্য আপনার প্রয়োজন হিসাবে করা হয়)।
সাধারণভাবে বলতে গেলে, আপনি যে অনুমান সরবরাহ করেছেন তা খুব সঠিক হতে হবে না - এটি কেবলমাত্র সারণী দৃশ্যে স্ক্রল সূচকটি সঠিকভাবে আকারে ব্যবহার করতে ব্যবহৃত হয় এবং টেবিল ভিউটি আপনার হিসাবে ভুল অনুমানের জন্য স্ক্রোল সূচককে সামঞ্জস্য করার একটি ভাল কাজ করে স্ক্রিন সেল অনস্ক্রিন। estimatedRowHeight
আপনার টেবিল ভিউতে সম্পত্তি ( viewDidLoad
যেমন বা অনুরূপ) একটি ধ্রুবক মানতে সেট করা উচিত যা "গড়" সারি উচ্চতা। কেবলমাত্র যদি আপনার সারি উচ্চতায় চূড়ান্ত পরিবর্তনশীলতা থাকে (উদাহরণস্বরূপ প্রস্থের ক্রম অনুসারে পৃথক) এবং আপনি যখন স্ক্রোল করবেন তখন আপনি স্ক্রল সূচকটি "জাম্পিং" লক্ষ্য করেন আপনি tableView:estimatedHeightForRowAtIndexPath:
প্রতিটি সারির জন্য আরও নির্ভুল অনুমান ফিরিয়ে আনতে প্রয়োজনীয় ন্যূনতম গণনা করার জন্য প্রয়োগকে বিরক্ত করবেন।
আইওএস 7 সাপোর্টের জন্য (স্বয়ংক্রিয় কক্ষ স্বয়ংক্রিয় আকার নির্ধারণ)
৩. একটি লেআউট পাস করুন এবং সেল উচ্চতা পান
প্রথমে, টেবিল ভিউ সেলটির প্রতিটি স্ক্রিন ইনস্টল করুন, প্রতিটি পুনরায় ব্যবহারকারীর শনাক্তকারীর জন্য একটি উদাহরণ , যা উচ্চতার গণনার জন্য কঠোরভাবে ব্যবহৃত হয়। (অফস্ক্রিন মানে সেল রেফারেন্সটি ভিউ কন্ট্রোলারের কোনও সম্পত্তি / আইভারে সঞ্চিত থাকে এবং tableView:cellForRowAtIndexPath:
টেবিল ভিউ থেকে আসলে অনস্ক্রিনে রেন্ডার করতে কখনই ফিরে আসে না )) এরপরে, ঘরটি অবশ্যই সঠিক সামগ্রী (যেমন পাঠ্য, চিত্র ইত্যাদি) দিয়ে কনফিগার করা উচিত এটি যদি টেবিল ভিউতে প্রদর্শিত হয় তবে এটি ধরে রাখবে।
তারপরে, ঘরটি অবিলম্বে তার সংক্ষিপ্তসারগুলি বিন্যাস করতে বাধ্য করুন এবং তারপরে ঘরের প্রয়োজনীয় উচ্চতা কী তা নির্ধারণ করার জন্য এর systemLayoutSizeFittingSize:
পদ্ধতিটি ব্যবহার করুন । কক্ষের সমস্ত বিষয়বস্তু ফিট করার জন্য প্রয়োজনীয় ক্ষুদ্রতম আকারটি পেতে ব্যবহার করুন । তারপরে ডেলিগেট পদ্ধতি থেকে উচ্চতাটি ফেরানো যেতে পারে ।UITableViewCell
contentView
UILayoutFittingCompressedSize
tableView:heightForRowAtIndexPath:
4. আনুমানিক সারি উচ্চতা ব্যবহার করুন
যদি আপনার টেবিল ভিউটিতে কয়েক ডজন সারি বেশি থাকে, তবে আপনি দেখতে পাবেন যে অটো লেআউট সীমাবদ্ধতা সমাধানের ফলে প্রথম টেবিলের দৃশ্যটি লোড করার সময় মূল থ্রেডটি দ্রুত ছিটকে যেতে পারে, যেমন tableView:heightForRowAtIndexPath:
প্রতিটি লোডের উপর প্রতিটি সারিতে বলা হয় ( স্ক্রোল সূচকটির আকার গণনা করার জন্য)।
আইওএস 7 হিসাবে, আপনি estimatedRowHeight
টেবিল ভিউতে সম্পত্তিটি (এবং একেবারে উচিত) ব্যবহার করতে পারেন । এটি যা করে তা হ'ল যেগুলি এখনও অনস্ক্রিনে নেই এমন কোষগুলির সারি উচ্চতার জন্য অস্থায়ী অনুমান / স্থানধারীর সাথে সারণী দর্শন সরবরাহ করে। তারপরে, যখন এই ঘরগুলি স্ক্রিনে স্ক্রোল করতে চলেছে তখন আসল সারি উচ্চতা গণনা করা হবে (কল করে tableView:heightForRowAtIndexPath:
), এবং আনুমানিক উচ্চতা প্রকৃতটির সাথে আপডেট হবে।
সাধারণভাবে বলতে গেলে, আপনি যে অনুমান সরবরাহ করেছেন তা খুব সঠিক হতে হবে না - এটি কেবলমাত্র সারণী দৃশ্যে স্ক্রল সূচকটি সঠিকভাবে আকারে ব্যবহার করতে ব্যবহৃত হয় এবং টেবিল ভিউটি আপনার হিসাবে ভুল অনুমানের জন্য স্ক্রোল সূচককে সামঞ্জস্য করার একটি ভাল কাজ করে স্ক্রিন সেল অনস্ক্রিন। estimatedRowHeight
আপনার টেবিল ভিউতে সম্পত্তি ( viewDidLoad
যেমন বা অনুরূপ) একটি ধ্রুবক মানতে সেট করা উচিত যা "গড়" সারি উচ্চতা। কেবলমাত্র যদি আপনার সারি উচ্চতায় চূড়ান্ত পরিবর্তনশীলতা থাকে (উদাহরণস্বরূপ প্রস্থের ক্রম অনুসারে পৃথক) এবং আপনি যখন স্ক্রোল করবেন তখন আপনি স্ক্রল সূচকটি "জাম্পিং" লক্ষ্য করেন আপনি tableView:estimatedHeightForRowAtIndexPath:
প্রতিটি সারির জন্য আরও নির্ভুল অনুমান ফিরিয়ে আনতে প্রয়োজনীয় ন্যূনতম গণনা করার জন্য প্রয়োগকে বিরক্ত করবেন।
৫. (যদি প্রয়োজন হয়) সারি উচ্চতা ক্যাচিং যুক্ত করুন
যদি আপনি উপরোক্ত সমস্ত কাজটি করে থাকেন এবং এখনও সীমাবদ্ধতা সমাধানের সময় কর্মক্ষমতাটি অগ্রহণযোগ্যভাবে ধীর হয়ে দেখছেন তবে tableView:heightForRowAtIndexPath:
দুর্ভাগ্যক্রমে আপনাকে সেল উচ্চতার জন্য কিছু ক্যাচিং বাস্তবায়ন করতে হবে। (এটি অ্যাপলের ইঞ্জিনিয়ারদের পরামর্শ দেওয়া মতামত)) সাধারণ ধারণাটি হ'ল অটোলেট ইঞ্জিনটি প্রথমবারের মতো সীমাবদ্ধতাগুলি সমাধান করতে দেয়, তারপরে সেই ঘরের জন্য গণনা করা উচ্চতা ক্যাশে করে এবং সেই ঘরের উচ্চতার জন্য ভবিষ্যতের সমস্ত অনুরোধের জন্য ক্যাশেড মানটি ব্যবহার করে use অবশ্যই কৌশলটি হ'ল এটি নিশ্চিত করা যে আপনি কোনও কক্ষের জন্য ক্যাশেড উচ্চতা সাফ করেছেন যখন এমন কোনও কিছু ঘটে যা ঘরের উচ্চতা পরিবর্তনের কারণ হতে পারে - প্রাথমিকভাবে, যখন সেই ঘরের সামগ্রী পরিবর্তন হয় বা অন্যান্য গুরুত্বপূর্ণ ঘটনা ঘটে (যেমন ব্যবহারকারীকে সামঞ্জস্য করে) ডায়নামিক প্রকারের পাঠ্য আকার স্লাইডার)।
আইওএস 7 জেনেরিক নমুনা কোড (প্রচুর সরস মন্তব্য সহ)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine which reuse identifier should be used for the cell at this
// index path, depending on the particular layout required (you may have
// just one, or may have many).
NSString *reuseIdentifier = ...;
// Dequeue a cell for the reuse identifier.
// Note that this method will init and return a new cell if there isn't
// one available in the reuse pool, so either way after this line of
// code you will have a cell with the correct constraints ready to go.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
// Configure the cell with content for the given indexPath, for example:
// cell.textLabel.text = someTextForThisCell;
// ...
// Make sure the constraints have been set up for this cell, since it
// may have just been created from scratch. Use the following lines,
// assuming you are setting up constraints from within the cell's
// updateConstraints method:
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
// If you are using multi-line UILabels, don't forget that the
// preferredMaxLayoutWidth needs to be set correctly. Do it at this
// point if you are NOT doing it within the UITableViewCell subclass
// -[layoutSubviews] method. For example:
// cell.multiLineLabel.preferredMaxLayoutWidth = CGRectGetWidth(tableView.bounds);
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine which reuse identifier should be used for the cell at this
// index path.
NSString *reuseIdentifier = ...;
// Use a dictionary of offscreen cells to get a cell for the reuse
// identifier, creating a cell and storing it in the dictionary if one
// hasn't already been added for the reuse identifier. WARNING: Don't
// call the table view's dequeueReusableCellWithIdentifier: method here
// because this will result in a memory leak as the cell is created but
// never returned from the tableView:cellForRowAtIndexPath: method!
UITableViewCell *cell = [self.offscreenCells objectForKey:reuseIdentifier];
if (!cell) {
cell = [[YourTableViewCellClass alloc] init];
[self.offscreenCells setObject:cell forKey:reuseIdentifier];
}
// Configure the cell with content for the given indexPath, for example:
// cell.textLabel.text = someTextForThisCell;
// ...
// Make sure the constraints have been set up for this cell, since it
// may have just been created from scratch. Use the following lines,
// assuming you are setting up constraints from within the cell's
// updateConstraints method:
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
// Set the width of the cell to match the width of the table view. This
// is important so that we'll get the correct cell height for different
// table view widths if the cell's height depends on its width (due to
// multi-line UILabels word wrapping, etc). We don't need to do this
// above in -[tableView:cellForRowAtIndexPath] because it happens
// automatically when the cell is used in the table view. Also note,
// the final width of the cell may not be the width of the table view in
// some cases, for example when a section index is displayed along
// the right side of the table view. You must account for the reduced
// cell width.
cell.bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds));
// Do the layout pass on the cell, which will calculate the frames for
// all the views based on the constraints. (Note that you must set the
// preferredMaxLayoutWidth on multiline UILabels inside the
// -[layoutSubviews] method of the UITableViewCell subclass, or do it
// manually at this point before the below 2 lines!)
[cell setNeedsLayout];
[cell layoutIfNeeded];
// Get the actual height required for the cell's contentView
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
// Add an extra point to the height to account for the cell separator,
// which is added between the bottom of the cell's contentView and the
// bottom of the table view cell.
height += 1.0;
return height;
}
// NOTE: Set the table view's estimatedRowHeight property instead of
// implementing the below method, UNLESS you have extreme variability in
// your row heights and you notice the scroll indicator "jumping"
// as you scroll.
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Do the minimal calculations required to be able to return an
// estimated row height that's within an order of magnitude of the
// actual height. For example:
if ([self isTallCellAtIndexPath:indexPath]) {
return 350.0;
} else {
return 40.0;
}
}
নমুনা প্রকল্প
ইউআইএলবেলগুলিতে গতিশীল সামগ্রী থাকা টেবিল ভিউ সেলগুলির কারণে এই প্রকল্পগুলি ভেরিয়েবল সারি উচ্চতা সহ সারণী দর্শনগুলির উদাহরণগুলি পুরোপুরি কাজ করছে।
জামারিন (সি # /। নেট)
আপনি Xamarin ব্যবহার করেন, তাহলে এই চেক আউট নমুনা প্রকল্পের দ্বারা একত্র করা @KentBoogaart ।