Swift4 tableview单元格高度不是动态的,总是静态的

时间:2017-10-05 17:23:06

标签: ios iphone swift

我真的需要帮助解决这个问题已经花了6天时间,我找不到解决办法。

我想制作简单的表视图,但其单元格的静态高度始终没有改变其中的项目

结果总是像image from emulator

我想在每个单元格中显示这个例子:

1 1 11 1 1111 1 1 11 11 11 1 1 1 11 1 1 11 11 1 11 1 11 11 11

22 22 2 2 2 2 2 2 2 2 2 2 2 22 22 22 22 2 2 22 2 2 2 2 22 2 2 22

33 33 3 3 3 3 3 3 3 3 3 3 3 33 33 3 3 3 3 3 333 3 3 3 3

444 44 4 44 444 4 4 4 4 4 4 4 4 4 4 4 4 44 4 4 4 4 4 4 4 44 44 4

它必须以垂直对齐的4个标签显示,但结果如前所示

我尝试过各种方式,例如使用故事板或代码制作视图但最后,我使用了名为 Stevia 的库,但仍然是相同的结果

这是视图控制器

    class AttendanceControlPage:UIViewController,UITableViewDataSource,UITableViewDelegate {

    @IBOutlet weak var dataTableView: UITableView!
    @IBOutlet weak var navLeftButton: UIBarButtonItem!


    //============================ Base Functions =================//
    override func viewDidLoad() {
        super.viewDidLoad()

        // Some tutorials said to put this two lines but not changes
        dataTableView.estimatedRowHeight = 44
        dataTableView.rowHeight = UITableViewAutomaticDimension


        initPage()

        dataTableView.register(AttendanceControlCell.self, forCellReuseIdentifier: "cellCon")

    }


    //============================ Init Functions =================//

    func initPage() {
            startLoading()
            self.navLeftButton.image = UIImage(named: "icn_drawer")
    }



    //==================== Nav Bar Buttons Actions ===================================//

    @IBAction func reloadPage(_ sender: Any) {
        self.dataArray.removeAll()
        loadData();
    }

    @IBAction func navLeftButtonAction(_ sender: Any) {
        showMenu()
    }

    //==================== Table view options ===================================//

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = dataTableView.dequeueReusableCell(withIdentifier: "cellCon", for: indexPath) as! AttendanceControlCell


        return cell
    }



}

这是单元格文件:

class AttendanceControlCell: UITableViewCell {

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)


        initFunc(cell : self)

    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!


    }
    func initFunc(cell : UITableViewCell)  {

        let name1 = UILabel()
        name1.numberOfLines = 0
        name1.text = "1 1 11  1 1111 1  1 11  11  11  1 1 1 11 1 1 11 11 1  11 1  11  11  11 "

        let name2 = UILabel()
        name2.numberOfLines = 0
        name2.text = "22 22 2 2 2 2 2 2 2 2 2 2 2  22  22  22 22 2 2  22 2 2 2 2  22 2  2 22 "

        let name3 = UILabel()
        name3.numberOfLines = 0
        name3.text = "33 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3  33 3 3 3  33 33 3 3 3 3 3 333 3 3 3 3 "

        let name4 = UILabel()
        name4.numberOfLines = 0
        name4.text = "444 44 4 44 444 4 4 4 4 4 4 4 4 4 4  44 4 4  44 4 4 4  4 4 4 4 44  44  4 "

        cell.contentView.sv(
            name1,
            name2,
            name3,
            name4
        )
        layout(
            20,
            |name1|,
            20,
            |name2|,
            20,
            |name3|,
            20,
            |name4|
        )

    }

    override func awakeFromNib() {
        super.awakeFromNib()


    }

}

这是我的故事板:只包含tableview with cell inisde it only

my storyboard image

请真的需要帮助

1 个答案:

答案 0 :(得分:1)

最后,我发现了这个问题。

问题是我在创建视图时忘了写下底部最后一个视图的底部约束

所以这部分

layout(
        20,
        |name1|,
        20,
        |name2|,
        20,
        |name3|,
        20,
        |name4|
    )

应该替换为

layout(
        20,
        |name1|,
        20,
        |name2|,
        20,
        |name3|,
        20,
        |name4|,
        0
    )

感谢所有试图帮助我的人... 我希望我的回答可以帮助任何有问题的人