我想要一个自定义UITableViewCell,其中包含许多垂直堆叠的UILabel,所有这些都可以包含换行的文本。借助iOS9中的新UIStackView和单元格自动调整大小机制,我认为这很简单,但是我无法使其正常工作。我正在使用Xcode 7beta3。

我创建了一个简单的测试应用程序。这是IB中的设置:
UIStackViewUIStackViewDistribution.FillUIStackViewAlignment.Fill是垂直的,但我基本上已经尝试了所有组合,但均未成功。
UILabel具有numberOfLines = 0lineBreakMode = .ByWordWrapping

编码:

class Cell: UITableViewCell {

    @IBOutlet var label1: UILabel!
    @IBOutlet var label2: UILabel!
}

class MasterViewController: UITableViewController {

    struct Data {
        let label1: String
        let label2: String
    }

    var objects = [Data]()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 60

        createData()
    }

    private func createData() {

        for ii in 0 ..< 20 {

            let data = Data(label1: "\(ii): hello world this is a longer string that should wrap without going weird", label2: "label2 has lots of writing as well and so should wrap onto multiple lines")
            objects.append(data)
        }
    }

    // MARK: - Table View

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

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! Cell
        let data = objects[indexPath.row]

        cell.label1?.text = data.label1
        cell.label2?.text = data.label2

        return cell
    }
}

我想知道Beta中是否存在错误,因为有时其中一个标签会自动换行,而另一个标签不会自动换行。

例如,我尝试将UIStackView嵌套在另一个UIStackView中,如下所示:

我根本没有更改任何代码。现在,一个标签会自动换行,而另一个则不会:

任何帮助将不胜感激!

最佳答案

问题是在单元初始化时,单元的宽度默认为600,因此它将基于600宽度计算行的高度。这是因为单元是在 Storyboard 中使用大小类创建的。

我认为这将是beta版中的错误,作为解决方案,请在xib中使用您的单元格,然后使用。它将正常工作。

关于uitableview - UITableViewCell中的UIStackView和多行标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31457469/

10-12 17:38