And*_*ewC 5 uitableview uilabel autolayout ios9 uistackview
我想要一个UITableViewCell具有多个垂直堆叠UILabel的自定义,所有这些都可以包含包含多行的文本.随着UIStackViewiOS9中的新功能和单元格自我调整机制,我认为这将是直截了当的,但我不能让它工作.我正在使用Xcode 7beta3.

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

在UIStackView垂直与UIStackViewDistribution.Fill和UIStackViewAlignment.Fill,但我已经基本尝试没有成功,所有的组合.
该UILabel■找numberOfLines = 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
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道测试版中是否存在错误,因为有时候其中一个标签会包装,而另一个则没有.
例如,我尝试将其嵌套UIStackView在另一个中UIStackView,如下所示:

我根本没有做任何代码更改.现在一个标签包装而另一个没有:

任何帮助将不胜感激!
问题是在单元格初始化时,单元格的宽度默认为 600,因此它将根据 600 宽度计算行的高度。这是因为单元格是在情节提要中创建的,并且具有大小类别。
我认为这将是测试版中的一个错误,作为解决方案,请将您的单元格放入 xib 中,然后使用 . 它会工作得很好。
| 归档时间: |
|
| 查看次数: |
3305 次 |
| 最近记录: |