UITableViewCell с автоматической высотой и автомакетом

avatar
Miguel
8 августа 2021 в 20:49
59
1
0

Я создаю UITableView, в котором ячейка имеет автоматическую высоту. Каждая ячейка имеет 3 UILabel, которые используют Autolayout: Cell design

Я думаю, что все ограничения установлены правильно, однако я испытываю что-то странное, и некоторые ячейки с меткой Event имеют большую высоту, чем хотелось бы:

Simulator

У некоторых строк высота в порядке, а у некоторых нет, высота уровня события может быть ниже.

override func viewDidLoad() {
    super.viewDidLoad()

    // First load table nib
    let bundle = Bundle(for: type(of: self))

    // Register table cell class from nib
    let cellNib = UINib(nibName: "OnlineEventsCell", bundle: bundle)
    tableView.register(cellNib, forCellReuseIdentifier: "onlineEventsCell")
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    
    self.tableView.estimatedRowHeight = 59.0; // set to whatever "average" cell height is
    self.tableView.rowHeight = UITableView.automaticDimension;
    self.navigationItem.title = NSLocalizedString("ActiveEvents", comment: "")
    
    searchBar.delegate=self
    self.refreshControl?.addTarget(self, action: #selector(refresh), for: UIControl.Event.valueChanged)

    loadViewData(reloading: false, eventName: nil)
    self.tableView.reloadData()
    
    
}
Источник
Mamta
11 августа 2021 в 05:46
0

Вы пытались вместо этого установить estimatedRowHeight и rowHeight в viewDidLoad()?

Ответы (1)

avatar
Ahmad Yasser Alshalabi
9 августа 2021 в 05:43
0

Вы можете использовать ограничения ячейки, как показано на этом изображении.

и добавьте это в свой код:

extension MainViewController: UITableViewDelegate, UITableViewDataSource {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.initTableView()
        
    }

    func initTableView() {
        
        self.tableViewController.delegate = self
        self.tableViewController.dataSource = self
        
        self.tableViewController.register(UINib(nibName: "HotsTableViewCell", bundle: nil), forCellReuseIdentifier: "HotsTableViewCell")
        
        self.tableViewController.backgroundColor = .white
        self.tableViewController.rowHeight = UITableView.automaticDimension
        self.tableViewController.bounces = false
        self.tableViewController.estimatedRowHeight = 600
        self.tableViewController.reloadData()

    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return arrData.count

    }
        
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        if arrData.count > 0 {
            
            let cell = tableView.dequeueReusableCell(withIdentifier: "HotsTableViewCell", for: indexPath) as! HotsTableViewCell
            cell.selectionStyle = .none
            cell.configuration(example: arrData[indexPath.row])
            return cell
        }
        
        return UITableViewCell()

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

}

Результат будет таким, как показано на этом изображении.