【问题标题】:UIStackView and multi-line labels in a UITableViewCellUITableViewCell 中的 UIStackView 和多行标签
【发布时间】:2015-10-06 02:11:40
【问题描述】:

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

我创建了一个简单的测试应用。这是IB中的设置:

UIStackViewUIStackViewDistribution.FillUIStackViewAlignment.Fill 是垂直的,但我基本上尝试了所有组合都没有成功。

UILabels 有 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
    }
}

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

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

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

任何帮助将不胜感激!

【问题讨论】:

    标签: uitableview autolayout uilabel ios9 uistackview


    【解决方案1】:

    问题是在初始化单元格时,单元格的宽度默认为 600,因此它将根据 600 宽度计算行的高度。这是因为单元格是在情节提要中创建的,具有大小类。

    我认为这将是测试版中的一个错误,作为解决方案,将您的单元格放入 xib,然后使用 .它会正常工作的。

    【讨论】:

    • 是的,解决了它。太感谢了。与此测试项目相比,我在实际项目中仍然遇到问题,但这一定是其他问题,我仍在调查中。
    • 经过大量调查后,NIB 中的UITableViewCell 的大小似乎用于自行调整大小。单元格永远不会比 NIB 中的小,但会做得更大以允许包装标签。但是,换行是根据 NIB 中的大小计算的,而不是表视图的大小。所以有些单元格看起来太高了,我假设可以容纳包装,即使标签实际上不需要在表格视图中换行。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多