UITtackView和UITableViewCell中的多行标签

时间:2015-07-16 14:43:47

标签: uitableview autolayout uilabel ios9 uistackview

我希望自定义surround <- function(my.df, my.var, my.val, my.method) { ddply(my.df, my.var, function(x) c(value = my.method(x[[my.val]]))) } my.df <- data.frame(group=rep(letters[1:4], times=25), x=rnorm(100)) surround(my.df, "group", "x", mean) 具有多个垂直堆叠的UITableViewCell个,其中所有这些都可以包含包含多行的文本。使用iOS9中的新UILabel和单元格自我调整机制,我认为这将是直截了当的,但我不能让它工作。我正在使用Xcode 7beta3。

Table view with labels not wrapping

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

IB setup with prototype cell

UIStackViewUIStackViewUIStackViewDistribution.Fill是垂直的,但我基本上已经尝试了所有组合而没有成功。

UIStackViewAlignment.FillUILabelnumberOfLines = 0

代码:

lineBreakMode = .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中,如下所示:

Nested UIStackView in IB

我根本没有修改任何代码。现在一个标签包裹而另一个没有:

One label wrapping only

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

问题是在单元初始化时,单元格的宽度默认为600,因此它将根据600宽度计算行的高度。这是因为在故事板中使用大小类创建了单元格。

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