swift - tutorial - uitableview example




تغيير حجم رأس الجدول عند استخدام أنواع ديناميكية (2)

في محاولة لتنفيذ

tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) 

و

tableView(_ tableView: UITableView, viewForHeaderInSection section: Int)
يجب أن تبدو شفرتك كما يلي:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return tableHeaderView.bounds.size.height
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return tableHeaderView
}

لدي TableViewController مع رأس. هذا الرأس عبارة عن حاوية، تربط إلى لوحة قصة أخرى باسم Header.storyboard

تحتوي Header.storyboard على طريقة عرض مكدس تحتوي على بعض التصنيفات، والتي يتم كتابتها بشكل ديناميكي.

يأتي نص التصنيفات من دب.

لا يتعلق البعد البعد أو حجم أريد أن تصور بشكل صحيح.

لقد استخدمت بعض الإجابات من سو للحصول على رأس حجم بشكل صحيح، ولكن من دون الحظ:

import UIKit

class TableViewController: UITableViewController {

    @IBOutlet weak var tableHeaderView: UIView!

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        // Dynamic sizing for the header view
        if let headerView = tableHeaderView {
            headerView.setNeedsLayout()
            headerView.layoutIfNeeded()

            let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
            var headerFrame = headerView.frame

            // If we don't have this check, viewDidLayoutSubviews() will get
            // repeatedly, causing the app to hang.
            if height != headerFrame.size.height {
                headerFrame.size.height = height
                headerView.frame = headerFrame
                tableHeaderView = headerView
           }
       }
   }
}

يمكن تغيير حجم عرض الجدول تلقائيا

ولكن مع الحاويات فإنه من المرجح لن تعمل

استخدام طريقة عرض مخصصة بدلا من فيوفورهيدرينسكتيون

class ViewController: UITableViewController {
    override func viewDidLoad() {
        tableView.estimatedSectionHeaderHeight = 10
        tableView.sectionHeaderHeight = UITableViewAutomaticDimension
    }
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let lab = UILabel()
        lab.text = "text \(section)"
        lab.font = UIFont.systemFont(ofSize: 10 * CGFloat(section) + 1)
        return lab
    }
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 5
    }
    //this method overriding is not necessary
    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return UITableViewAutomaticDimension
    }
}





storyboard