আমি সঠিক প্রতিনিধি এবং ডেটাসোর্স সংযোগগুলি সহ টেবিলভিউ সেট আপ করেছি .. পুনরায়লোডডাটা পদ্ধতিটি বাদে ডেটাসোর্স এবং প্রতিনিধি পদ্ধতিগুলিকে কল করে viewForHeaderInSection:
।
কেন যে এত?
sectionHeaderHeight
?
আমি সঠিক প্রতিনিধি এবং ডেটাসোর্স সংযোগগুলি সহ টেবিলভিউ সেট আপ করেছি .. পুনরায়লোডডাটা পদ্ধতিটি বাদে ডেটাসোর্স এবং প্রতিনিধি পদ্ধতিগুলিকে কল করে viewForHeaderInSection:
।
কেন যে এত?
sectionHeaderHeight
?
উত্তর:
ব্যবহারের জন্য tableView:viewForHeaderInSection:
আপনিও বাস্তবায়ন করা দরকার tableView:heightForHeaderInSection:
। এটি শিরোনামের জন্য উপযুক্ত নন-শূন্য উচ্চতা ফিরিয়ে আনবে। এছাড়াও আপনি এটি বাস্তবায়ন করেন না তা নিশ্চিত করুন tableView:titleForHeaderInSection:
। আপনার কেবলমাত্র একটি বা অন্যটি ( viewForHeader
বা titleForHeader
) ব্যবহার করা উচিত ।
numberOfSections
।
titleForHeaderInSection:
এবং viewForHeaderInSection:
এবং পরবর্তীটি দেখানো একটি সাবক্লাস হয় UITableViewHeaderFooterView
তবে textLabel.text
এটি স্বয়ংক্রিয়ভাবে titleForHeaderInSection:
স্ট্রিংয়ের সমস্ত ক্যাপ সংস্করণে সেট হয়ে গেছে । এই আচরণটি প্রতিরোধ করতে হয় হয় titleForHeaderInSection:
উত্তরাধিকার সূত্রে পরিবর্তে কাস্টম লেবেল প্রয়োগ বা ব্যবহার করবেন না textLabel
।
কৌতুক ঐ দুটি পদ্ধতি বিভিন্ন অন্তর্গত হয় UITableView
প্রোটোকল: tableView:titleForHeaderInSection:
একটি হল UITableViewDataSource
প্রোটোকল পদ্ধতি, যেখানে tableView:viewForHeaderInSection
জন্যে UITableViewDelegate
।
এর মানে:
আপনি যদি পদ্ধতিগুলি বাস্তবায়ন করেন তবে কেবলমাত্র হিসাবে হিসাবে নিজেকে নির্ধারণ
dataSource
করেন UITableView
, আপনার
tableView:viewForHeaderInSection
বাস্তবায়ন অগ্রাহ্য করা হবে।
tableView:viewForHeaderInSection
একটি উচ্চ অগ্রাধিকার আছে। আপনি পদ্ধতির উভয় বাস্তবায়ন এবং উভয় নিজেকে ধার্য যদি
dataSource
এবং delegate
জন্য UITableView
, আপনার জন্য অধ্যায় হেডার মতামত ফিরে আসবে কিন্তু আপনার
tableView:titleForHeaderInSection:
উপেক্ষা করা হবে।
আমি অপসারণের চেষ্টাও করেছি tableView:heightForHeaderInSection:
; এটি ভাল কাজ করেছে এবং উপরের পদ্ধতিগুলিকে প্রভাবিত করবে বলে মনে হচ্ছে না। তবে ডকুমেন্টেশন বলছে যে এটি tableView:viewForHeaderInSection
সঠিকভাবে কাজ করা প্রয়োজন; সুতরাং নিরাপদে থাকার জন্য এটি কার্যকর করাও বুদ্ধিমানের কাজ।
UITableViewDelegate
করতে ভুলে গেছি self
, কারণ আমি ভেবেছিলাম, এটি tableView:viewForHeaderInSection
একটি UITableViewDataSource
পদ্ধতি। ধন্যবাদ!
titleForHeader
যার অভ্যন্তরীণ আকারের মাধ্যমে অর্জন করতে পারেন । অভ্যন্তরীণ আকার হরফ পরিবার এবং আকারের উপর ভিত্তি করে গণনা করা হয়।
@rmaddy নিয়ম, দুইবার misstated করেছেন: বাস্তবে, tableView:viewForHeaderInSection:
নেই না প্রয়োজন যে আপনার কাছে বাস্তবায়ন tableView:heightForHeaderInSection:
, এবং এছাড়াও এটি উভয় কল পুরোপুরি জরিমানা titleForHeader
এবং viewForHeader
। আমি ঠিক রেকর্ডের জন্য নিয়মটি সঠিকভাবে বর্ণনা করব:
নিয়মটি কেবল viewForHeader
এটিকে বলা হয় না যদি আপনি কোনওভাবে শিরোনামকে উচ্চতা না দিয়ে থাকেন। আপনি তিনটি উপায়ে যেকোন সংমিশ্রণে এটি করতে পারেন:
বাস্তবায়ন tableView:heightForHeaderInSection:
।
টেবিল সেট করুন sectionHeaderHeight
।
কল করুন titleForHeader
(এটি অন্যথায় যদি না থাকে তবে এটি শিরোনামকে একটি ডিফল্ট উচ্চতা দেয়)।
যদি আপনি এই জিনিসগুলির মধ্যে কোনও একটি না করেন তবে আপনার কোনও শিরোনাম নেই এবং কল করা viewForHeader
হবে না। কারণ উচ্চতা ছাড়াই রানটাইমটি কীভাবে ভিউটির আকার পরিবর্তন করতে পারে তা জানে না, তাই এটির জন্য জিজ্ঞাসা করা বিরক্ত করে না।
tableView:viewForHeaderInSection:
: "এই পদ্ধতিটি তখনই tableView:heightForHeaderInSection:
কার্যকর হয় যখন প্রয়োগ করা হয়।"
titleForHeaderInSection
এবং viewForHeaderInSection
? টেবিল ভিউ কেবল দুজনের একজনকে কল করবে (আমি ভুলে যাই যা এই মুহুর্তে প্রাধান্য পায়)।
viewForHeader
ডাকা হয় । আমার এটি ঘটেছে, যেখানে আমাকে ডাকা হয়েছিল এবং শিরোনামগুলি ঠিক একদিন পর্যন্ত প্রদর্শন করেছিল, আমার পক্ষে কোনও পরিবর্তন ছাড়াই তারা তা করেনি । আমি যখন ডাকা হ'ল ন্যূনতম প্রয়োজনীয়তাগুলি কী তা আবিষ্কার করতে পরীক্ষা-নিরীক্ষা শুরু করি That's এবং এখন আমি জানি। এবং এখন আপনি কি। viewForHeader
viewForHeader
দেওয়া estimatedSectionHeaderHeight
এবং sectionHeaderHeight
মানগুলি আমার সমস্যাটিকে স্থির করে। যেমন,
self.tableView.estimatedSectionHeaderHeight = 100
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
রম্যাডির জবাবটি বন্ধ করে দিয়ে, আমি শিরোনাম দর্শনটি আড়াল করার চেষ্টা করছিলাম এবং "টেবিল ভিউ: উচ্চতাফোড়হিনডারসেকশন" এবং এর থেকে একটি 0 উচ্চতার ভিউয়ের জন্য 0.0f ফিরে আসছিলাম tableView:viewForHeaderInSection
।
থেকে পরিবর্তন করার পরে return 1.0f
করতে return 0.0f
এ tableView:heightForHeaderInSection
, প্রতিনিধি পদ্ধতি tableView:viewForHeaderInSection
প্রকৃতপক্ষে ডাকা হয়।
আমার পছন্দসই প্রভাবটি "টেবিল ভিউ: উচ্চতাফোড়হিন্ডইনসেকশন" ব্যবহার না করেই কাজ করে; তবে এটি অন্যদের জন্য দরকারী হতে পারে যারা "টেবিলভিউ: উচ্চতাফোড়হিন্ডিশন" প্রতিনিধি পদ্ধতি কল করার ক্ষেত্রে সমস্যা নিয়ে আসছেন।
tableView:heightForHeaderInSection:
আপনার শিরোনাম> 0 এর জন্য প্রয়োগ এবং উচ্চতা নির্ধারণ করা উচিত ।
এই প্রতিনিধি পদ্ধতি পদ্ধতির পাশাপাশি চলে viewForHeaderInSection:
।
আশা করি এটা কাজে লাগবে.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 40;
}
সংক্ষিপ্তভাবে লক্ষণীয় যে আপনার যদি tableView:heightForHeaderInSection:
রিটার্ন বাস্তবায়ন করে UITableViewAutomaticDimension
তবে tableView:viewForHeaderInSection:
ডাকা হবে না।
UITableViewAutomaticDimension
ধরে নেওয়া হয় যে একটি স্ট্যান্ডার্ড UITableViewHeaderFooterView
ব্যবহার করা হবে যা প্রতিনিধি পদ্ধতিতে জনবহুল tableView:titleForHeaderInSection:
।
এর মন্তব্যগুলি থেকে UITableView.h
:
থেকে এই মান রিটার্নিং
tableView:heightForHeaderInSection:
বাtableView:heightForFooterInSection:
যে ফিট মান থেকে ফিরে উচ্চতা ফলাফলtableView:titleForHeaderInSection:
বাtableView:titleForFooterInSection:
যদি শিরোনাম শূন্য নয়।
estimatedSectionHeaderHeight
কোনও মান সেট করে থাকেন tableView:viewForHeaderInSection
তবে ডাকা হবে (সারিগুলির জন্য স্বয়ংক্রিয় মাত্রাগুলি একইভাবে কীভাবে কাজ করবে)
আমি মাত্র একটি শিরোনাম আইওএস 7.1 এর জন্য না দেখানো নিয়ে একটি সমস্যা পেয়েছি , তবে পরবর্তী পরীক্ষাগুলি 8.1 এবং 8.4 দিয়ে স্পষ্ট করে পরীক্ষা করেছি with
ঠিক একই কোডের জন্য, 7.1 কোনও বিভাগে শিরোনাম প্রতিনিধি পদ্ধতিগুলিতে মোটেই কল করছিল না , সহ: tableView:heightForHeaderInSection:
এবং tableView:viewForHeaderInSection:
।
পরীক্ষার পরে, আমি দেখতে পেলাম যে আমার তৈরি শিরোনামগুলি থেকে এই লাইনটি সরিয়ে ফেলাviewDidLoad
7.1-এ পুনরায় প্রদর্শিত হবে এবং আমি পরীক্ষিত অন্যান্য সংস্করণগুলিকে প্রভাবিত করে না:
// _Removing_ this line _fixed_ headers on 7.1
self.tableView.estimatedSectionHeaderHeight = 80;
… সুতরাং, সেখানে অন্তত 7.1 এর জন্য কোনও ধরণের বিরোধ আছে বলে মনে হচ্ছে।
একই সমস্যাটি আমার সাথে দেখা দিয়েছে তবে আমি এক্সকোড 9 থেকে স্বয়ংক্রিয় উচ্চতার গণনাটি ব্যবহার করছিলাম বলে উপরে বর্ণিত হিসাবে আমি কোনও স্পষ্ট উচ্চতার মান দিতে পারি না। কিছু পরীক্ষার পরে আমি সমাধান পেয়েছি , আমাদের এই পদ্ধতিটি ওভাররাইড করতে হবে,
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForHeaderInSection:(NSInteger)section
{
return 44.0f;
}
যদিও আমি উভয় বিকল্প পরীক্ষা করে দেখেছি
অ্যাপল যেমন বলে স্টোরিবোর্ড থেকে , তবুও আমি এই অদ্ভুত ত্রুটি পেয়েছি।
দয়া করে দ্রষ্টব্য : এই ত্রুটিটি কেবল আইওএস -10 সংস্করণে দেখানো হয়েছিল আইওএস -11 সংস্করণে নয়। হতে পারে এটি এক্সকোড থেকে একটি বাগ। ধন্যবাদ
আমি যা পেয়েছি তা এখানে ( সুইফ্ট 4 ) (ধন্যবাদ to অন্য প্রশ্নের এই মন্তব্যের )
আমি শিরোনাম ফোর্ডহাইডারইনসেকশন বা ভিউফোরইডারআইএনসেকশন ব্যবহার করেছি - এটি ছিল না যে টেবিলভিউটি স্ক্রল করার সময় এবং নতুন কক্ষগুলি লোড করার সময় তাদের কল করা হচ্ছে না, তবে শিরোনামের লেখার লেবেলের জন্য আমি যে ফন্ট পছন্দ করেছি তা কেবলমাত্র প্রদর্শিত হবে যা প্রথমে লোডে দৃশ্যমান ছিল , এবং টেবিলটি স্ক্রোলড হিসাবে নয়।
ফিক্সটি হবে ডিসপ্লেহাইডারভিউ:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let header = view as? UITableViewHeaderFooterView {
header.textLabel?.font = UIFont(name: yourFont, size: 42)
}
}
আমার ক্ষেত্রে আমি UITableviewCell
সেলটি viewForHeaderInSection
এভাবে ব্যবহার করে এবং ফিরে আসার শিরোনাম দৃশ্য তৈরি করেছি
return cell
এটিতে পরিবর্তন
return cell.contentView
আমার জন্য কাজ করেছেন।
আমার ক্ষেত্রে
viewForHeaderInSection
সুদৃ a় ক্লাসে ডেইজিকে বিরক্ত করছিল না এমন দূরে একটি উদ্ভূত শ্রেণিতে প্রয়োগ করা হয়েছিল।
আমার ক্ষেত্রে এটি কারণ ছিল যা আমি প্রয়োগ করি নি:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
আমি একটি সুইফট 2 প্রকল্প থেকে নিম্নলিখিত দুটি পদ্ধতিটি আমার সুইফট 3 প্রকল্পে কাটা ও পেস্ট করেছি যা কখনও বলা হয় নি কারণ সুইফ্ট 3 এ এই প্রথম পদ্ধতিগুলির "-" পরামিতির নামের আগে থাকতে হবে।
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44.0
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: B2BTrolleyHeaderFooterView.reuseIdentifier) as! B2BTrolleyHeaderFooterView
return headerView
}
heightForHeaderInSection:
বাস্তবায়িত?