【问题标题】:Programmatically written cells of UITableView are in the same placeUITableView 的程序编写的单元格在同一个地方
【发布时间】:2021-12-16 09:02:52
【问题描述】:

界面:

调试器中的接口:

这里是tableview的配置

private func configureTableView(){
    view.addSubview(tableView)
    
    tableView.delegate = self
    tableView.dataSource = self
    tableView.separatorStyle = .none
    // tableView.rowHeight = UITableView.automaticDimension
    tableView.register(DishCell.self, forCellReuseIdentifier: "dishCell")
    
    // tableView.sectionHeaderHeight = UITableView.automaticDimension

}

这里是 tableView 扩展

extension MenuViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 0 {
            return 380
        }
        return 48
    }
    func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
        return 122
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return UITableView.automaticDimension
    }
}

extension MenuViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return viewModel.dishes.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return viewModel.dishes[section].count
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let dishType = viewModel.dishTypes[section]
        
        if section == 0 {
            let restaurant = viewModel.restaurant
            return FirstMenuHeader(restaurant: restaurant, dishType: dishType)
        }else{
            return DefaultMenuHeader(dishType: dishType)
        }
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "dishCell") as! DishCell
        
        let dish = viewModel.dishes[indexPath.section][indexPath.row]
        cell.set(dish: dish)
        
        return cell
    }
}

只是为了澄清 DishCell,FirstMenuHeader 和 DefaultMenuHeader 如果你把它们放在 UITableview 之外看起来很好。他们有定义他们高度的约束。然而,它们的高度是动态的,取决于文本行数。

【问题讨论】:

  • 你能显示DishCell吗?此外,您在cellForRow 中的出队看起来不正确。由于您没有传递索引路径,因此您拥有的代码应该会崩溃,我希望 dequeue 最初返回 nil,因为重用池中没有单元格。

标签: ios swift uitableview uikit


【解决方案1】:

问题出在dishCell中。我用视图做了约束,而我必须用contentView做约束。 我已经重写了我的约束并且问题已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多