以编程方式创建的UITableViewCell仅显示其AutoLayout的第一个子视图

时间:2016-08-14 17:43:11

标签: ios swift uitableview

我在Swift中编写了一个iOS应用程序。我创建了一个表视图场景,但它只显示了它的第一个子视图。我试图让代码尽可能简单。我创建了一个带有两个标签的表格视图单元格,但它仍然只显示第一个标签。代码如下。为什么不显示第二个标签?我的AutoLayout约束是否有误?谢谢!

import UIKit

class TestCell: UITableViewCell {
    let viewsDict: [String : UILabel] = [
        "first": UILabel(),
        "second": UILabel(),
    ]

    override func awakeFromNib() {
        viewsDict["first"]!.text = "first"
        viewsDict["second"]!.text = "second"
        viewsDict["first"]!.translatesAutoresizingMaskIntoConstraints = false
        viewsDict["second"]!.translatesAutoresizingMaskIntoConstraints = false
        contentView.addSubview(viewsDict["first"]!)
        contentView.addSubview(viewsDict["second"]!)
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[first]-[second]-|", options: [], metrics: nil, views: viewsDict))
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[first]", options: [], metrics: nil, views: viewsDict))
        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[second]", options: [], metrics: nil, views: viewsDict))
    }
}

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
    }

}

1 个答案:

答案 0 :(得分:2)

您的评论听起来像是在询问如何以编程方式自动设置单元格的高度。有几种不同的方法可以做到这一点:

最接近你想要的东西,在iOS 8及之后,你可以让tableView自己计算:

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 60.0;

您也可以设置tableView的rowHeight属性,并使每一行都具有相同的高度:

self.tableview.rowHeight = 60.0

或者您可以实现委托方法来动态计算行高。这种方式还允许您检查每个单独的单元格并确定您应该查看的高度:

func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! TestCell
    // Calculate the height that you want ..
    let height = 60.0
    return height
}

StackOverflow post更深入地自动调整UITableViewCell的大小。