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

Ios 以编程方式创建的UITableViewCell仅使用AutoLayout显示其第一个子视图,ios,swift,uitableview,Ios,Swift,Uitableview,我正在用Swift编写一个iOS应用程序。我创建了一个表视图场景,但它仅显示其第一个子视图。我试图使代码尽可能简单。我创建了一个带有两个标签的表视图单元格,但它仍然只显示第一个标签。代码如下。为什么不显示第二个标签?我的自动布局约束是否错误?谢谢 import UIKit class TestCell: UITableViewCell { let viewsDict: [String : UILabel] = [ "first": UILabel(),

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

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)
    }

}

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

最接近您可能想要的,在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
}

自动调整
UITableViewCell

的大小,这一点更深入。从您的评论中,听起来您在问如何以编程方式自动设置单元格的高度。有几种不同的方法可以做到这一点:

最接近您可能想要的,在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
}

在IB中自动调整
UITableViewCell

的大小时,这将深入到更大的深度。我拖动原型单元格以获得更大的高度,并显示第二个子视图。。。但我不确定它是否能自动调整高度。在IB中,我拖动原型单元格以获得更大的高度,然后显示第二个子视图。。。我不确定它是否能自动调整高度。