অটো লেআউটটি ব্যবহার করে কোনও গতিশীল টেবিল ভিউ বিভাগের শিরোনামের উচ্চতা পাওয়া সম্ভব?


112

আইওএস 8-এ নতুন, আপনি আনুমানিক সারি উচ্চতা নির্ধারণ করে 100% গতিশীল টেবিল ভিউ সেলগুলি পেতে পারেন, তারপরে অটো লেআউটটি ব্যবহার করে ঘরে থাকা উপাদানগুলিকে বিন্যাস করুন। বিষয়বস্তু উচ্চতা বৃদ্ধি পেলে, ঘরটিও উচ্চতায় বৃদ্ধি পাবে। এটি চূড়ান্তভাবে কার্যকর এবং ভাবছি যে টেবিল দর্শনে বিভাগের শিরোনামগুলির জন্য একই কীর্তিটি সম্পাদন করা যায়?

উদাহরণস্বরূপ, কেউ কি একটি UIViewইন তৈরি করতে পারে tableView:viewForHeaderInSection:, একটি UILabelসংক্ষিপ্তসার যুক্ত করতে পারে, তার বিপরীতে লেবেলের জন্য স্বয়ংক্রিয় বিন্যাসের সীমাবদ্ধতাগুলি নির্দিষ্ট করতে পারে এবং প্রয়োগ না করেই লেবেলের বিষয়বস্তুর সাথে মানানসই আকারের উচ্চতা বৃদ্ধি করতে পারে tableView:heightForHeaderInSection:?

জন্য ডকুমেন্টেশন viewForHeaderInSection বলেছেন: "এই পদ্ধতিটি কেবল তখনই সঠিকভাবে কাজ করে যখন টেবিল ভিউ: উচ্চতাফোড় হাইডারআইনসেকশন: প্রয়োগ করা হয়" " আইওএস 8 এর জন্য কিছু পরিবর্তন হয়েছে কিনা তা আমি শুনিনি।

যদি কেউ এটি না করতে পারে তবে এই আচরণটি নকল করার সর্বোত্তম উপায় কী?

উত্তর:


275

এটা সম্ভব. আইওএস 8 এ প্রয়োগ করা গতিশীল সেল হাইটের পাশাপাশি এটি নতুন।

এটা খুবই সাধারণ. এটি কেবল এতে যুক্ত করুন viewDidLoad:

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;

তারপরে ওভাররাইড করুন viewForHeaderInSectionএবং ফিট হিসাবে আপনার দৃষ্টিতে উপাদানগুলিকে সীমাবদ্ধ করতে অটো লেআউট ব্যবহার করুন। এটাই! বাস্তবায়নের দরকার নেই heightForHeaderInSection। এবং আসলেsectionHeaderHeight প্রয়োজন হয় না হয় বর্ণিত হয়, আমি কেবল এটি স্পষ্টতার জন্য যুক্ত।

নোট করুন যে আইওএস 11 এ, সেল এবং শিরোলেখ / পাদলেখের দর্শনগুলি ডিফল্টরূপে আনুমানিক উচ্চতা ব্যবহার করে। কী করা উচিত তা হ'ল সিস্টেমটি কী প্রত্যাশা করবে তা আরও ভালভাবে জানাতে একটি আনুমানিক উচ্চতা সরবরাহ করা। ডিফল্ট মান হ'ল UITableViewAutomaticDimensionতবে আপনার আরও ভাল অনুমান দেওয়া উচিত যে যদি সম্ভব হয় তবে গড় উচ্চতা।


3
এটি কার্যকর হলে এটি দুর্দান্ত, তবে ডক্স এটির উল্লেখ করে না, এবং ডাব্লুডাব্লুডিসি সেশনও আমি সঠিকভাবে স্মরণ করিয়ে দিইনি। এর জন্য দস্তাবেজ UITableViewAutomaticDimensionবলে "যদি আপনি এই ধ্রুবক আসতে tableView:heightForHeaderInSection:বা tableView:heightForFooterInSection:, UITableViewউচ্চতা থেকে ফিরে মান ফিট ব্যবহার tableView:titleForHeaderInSection:বা tableView:titleForFooterInSection:(যদি শিরোনাম হয় না nil)।"
অ্যারন ব্র্যাজার

28
এটি আমার পক্ষে কাজ করে না। আমার বিভাগের শিরোনামটি স্বয়ংক্রিয়ভাবে উচ্চতা গণনা করতে সক্ষম হয়েছিল, তবে এটি বিভাগের ঘরগুলি ওভারল্যাপ করে। আমি একটি এক্সিব ফাইল ব্যবহার করে আমার শিরোলেখের দৃশ্যটি সেট আপ করছি এবং ইন্টারফেস বিল্ডারে আমার সীমাবদ্ধতাগুলি সেট করছি। এটা কি আমার সমস্যা? ছেলেরা কোথায় সীমাবদ্ধতা তৈরি করছে? ধন্যবাদ!
CoBrA2168

5
প্রতিশ্রুতি হিসাবে এখানে নমুনা কোডটি দেওয়া হয়েছে: github.com/ebetabox/ ডায়নামিকসেলসেকশনহাইট
পাকিতোভি

10
এখানে অন্য একটি মূল বিষয়, বিভাগগুলিতে কাজ করার জন্য আপনার টেবিল সেলগুলিকে অটো উচ্চতার (ইউআইটিএবলভিউআউটমেটিক ডাইমেনশন) গণনার জন্যও কনফিগার করা দরকার।
বব স্প্রিন

9
আপনার কাছে অবশ্যই estimatedSectionHeaderHeightবা tableView:estimatedHeightForHeaderInSection:sectionHeaderHeightবা tableView:heightForHeaderInSection:। অতিরিক্তভাবে, আপনি যদি ডেলিগেট পদ্ধতিগুলি ব্যবহার করেন তবে অনুমানের জন্য আপনাকে অবশ্যই পুরোপুরি ১.০০ এর চেয়ে বেশি মান (সম্পূর্ণরূপে অনির্ধারিত আচরণ) প্রদান করতে হবে, অন্যথায় উচ্চতার প্রতিনিধি ডাকা হবে না এবং ডিফল্ট টেবিল ভিউ শিরোনামের উচ্চতা ব্যবহার করা হবে।
ভাদোফ

29

এটি estimatedSectionHeaderHeightআপনার টেবিল ভিউতে সেট করে (বা ফিরে) সম্পাদন করা সম্ভব can

যদি আপনার বিভাগের শিরোনামটি সেটিংসের পরে আপনার ঘরগুলি ওভারল্যাপ করছে তবেestimatedSectionHeaderHeight নিশ্চিত হয়ে নিন যে আপনিও এটি ব্যবহার করছেন estimatedRowHeight

(আমি এই উত্তরটি যুক্ত করছি কারণ দ্বিতীয় অনুচ্ছেদে এমন একটি সমস্যার উত্তর রয়েছে যা কিছু মন্তব্য পড়ার পরে পাওয়া যেতে পারে যা কিছু মিস করতে পারে))


1
ধন্যবাদ, estimatedRowHeight
মোহন এর

1
আপনি যদি সারিগুলির জন্য ইউআইটিএবলভিউআউটমেটিক মাত্রা ব্যবহার না করেন তবে এটি সত্য। আমাকে এক ঘন্টা বাঁচানোর জন্য ধন্যবাদ
রায়ান রোমানচুক

14

একই ইস্যুতে আটকে গিয়েছি যেখানে শিরোলেখটি শূন্যের উচ্চতা না পাওয়া পর্যন্ত এবং যতক্ষণ না আমি প্রতিনিধিটির জন্য একটি নির্দিষ্ট উচ্চতা সরবরাহ করি heighForHeaderInSection

এর মধ্যে অনেকগুলি সমাধানের চেষ্টা করেছে

self.tableView.sectionHeaderHeight = UITableView.automaticDimension
self.tableView.estimatedSectionHeaderHeight = 73

তবে কিছুই কাজ করেনি। আমার সেলটি যথাযথ অটোলেআউটগুলিও ব্যবহার করছিল। নিম্নলিখিত কোডগুলি ব্যবহার করে সারিগুলি তাদের উচ্চতা পরিবর্তনশীল করে নিচ্ছে কিন্তু বিভাগের শিরোনামটি ছিল না।

self.tableView.estimatedRowHeight = 135
self.tableView.rowHeight = UITableView.automaticDimension

ফিক্সটি অত্যন্ত সহজ এবং অদ্ভুত তবে আমার জন্য 1 টি লাইন কোডের পরিবর্তে প্রতিনিধি পদ্ধতিগুলি প্রয়োগ করতে হয়েছিল estimatedSectionHeaderHeightএবং এটি sectionHeaderHeightআমার ক্ষেত্রে অনুসরণ করে।

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    UITableView.automaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
    73
}

11

সুইফট 4+

কাজ করা (100% পরীক্ষিত)

আপনার যদি উভয় বিভাগের পাশাপাশি সামগ্রীর উপর ভিত্তি করে গতিশীল উচ্চতা সহ সারি প্রয়োজন হয় তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন:

ভিডিডলিডে () এই লাইনগুলি লিখুন:

    self.globalTableView.estimatedRowHeight = 20
    self.globalTableView.rowHeight = UITableView.automaticDimension

    self.globalTableView.sectionHeaderHeight =  UITableView.automaticDimension
    self.globalTableView.estimatedSectionHeaderHeight = 25;

এখন আমরা ইউআইটিএবল ভিউ প্রতিনিধি পদ্ধতি ব্যবহার করে সারি উচ্চতা এবং বিভাগের উচ্চতা নির্ধারণ করেছি:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
   {
       return UITableView.automaticDimension
   }
   func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {

       return UITableView.automaticDimension

   }

এই মহান উত্তরের নোট2020 সালের হিসাবে কেবলমাত্র ভিডডিডলোডে চারটি বৈশিষ্ট্য ব্যবহার করা ঠিক হবে।
ফ্যাটি

এই মহান উত্তরের নোট২০২০ সাল পর্যন্ত আপনার কাছে দুটি "অকেজো" লাইনের একটি আনুমানিক উচ্চতা দেওয়ার দরকার (বলুন, 20 বা তাই)।
ফ্যাটি

6

আমি চেষ্টা করেছিলাম

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;

তবে এটি মাল্টলাইন লেবেল সহ সঠিকভাবে শিরোনামের আকার দেয় নি। আমার সমস্যা সমাধানের জন্য এটি যুক্ত করা হয়েছে:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Recalculates height
    tableView.beginUpdates()
    tableView.endUpdates()
}

তথ্য উৎস ফাংশন সংজ্ঞায়িত করবেন tableView:estimatedHeightForHeaderInSectionএবং tableView:heightForHeaderInSectionপরিবর্তে viewDidLoad এ সংজ্ঞায়িত করুন।
কিথ ইয়োহ

আমি দেখতে পেয়েছি যে estimatedSectionHeaderHeightআইওএস 11
ডক্টরব্রেক্টর

1

আমার ক্ষেত্রে:

  1. প্রোগ্রামক্রমে কাজ করে না সেট ।

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension

  1. স্টোরিবোর্ডে সেট করুন কাজ করে না

  2. ওভাররাইড heightForHeaderInSection কাজ

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return UITableViewAutomaticDimension
}

পরীক্ষার পরিবেশ:

  • ম্যাক ওএস 10.13.4
  • এক্সকোড সংস্করণ 9.4.1
  • সিমুলেটর আইফোন 8 প্লাস

0

হ্যাঁ, এটি আমার পক্ষে কাজ করে। আমাকে নীচের মতো আরও পরিবর্তন করতে হবে:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let label = UILabel()

    label.numberOfLines = 0
    label.text          = my own text

    return label
}

-2

আমি পরিবর্তিত iuriimoz উত্তর । সবেমাত্র ভিউউইলএয়ার পদ্ধতিটি প্রতিস্থাপন করা হয়েছে:

tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = 25


override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Recalculates height
    tableView.layoutIfNeeded() 
}

এছাড়াও টেবিলভিউ.লেআউটআউটআইফনেড () এ যুক্ত করুন

override func viewDidAppear(_ animated: Bool) {

    super.viewDidAppear(animated)
    tableView.layoutIfNeeded()
}

আইওএস 10 এর জন্য

tableView.beginUpdates()
tableView.endUpdates()

আমার জন্য ভিউউইল অ্যাপয়ারে "বিবর্ণ" অ্যানিমেশন প্রভাব রয়েছে

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