UIStackView 和 UITableViewCell 中的多行标签
UIStackView and multi-line labels in a UITableViewCell
我想要一个自定义 UITableViewCell
,其中包含许多垂直堆叠的 UILabel
,所有这些都可以包含多行换行的文本。使用 iOS9 中的新 UIStackView
和单元格自动调整大小机制,我认为这会很简单,但我无法让它工作。我正在使用 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
}
}
我想知道测试版中是否存在错误,因为有时一个标签会换行而另一个不会。
例如,我尝试将 UIStackView
嵌套在另一个 UIStackView
中,如下所示:
我根本没有做任何代码更改。现在一个标签换行而另一个不换行:
如有任何帮助,我们将不胜感激!
问题是在单元格初始化时,单元格的宽度默认为 600,因此它会根据 600 的宽度计算行的高度。这是因为单元格是在故事板中创建的,大小为 类。
我认为这将是测试版中的一个错误,作为此问题的解决方案,请将您的单元格放入 xib,然后使用 .它会很好地工作。
我想要一个自定义 UITableViewCell
,其中包含许多垂直堆叠的 UILabel
,所有这些都可以包含多行换行的文本。使用 iOS9 中的新 UIStackView
和单元格自动调整大小机制,我认为这会很简单,但我无法让它工作。我正在使用 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
}
}
我想知道测试版中是否存在错误,因为有时一个标签会换行而另一个不会。
例如,我尝试将 UIStackView
嵌套在另一个 UIStackView
中,如下所示:
我根本没有做任何代码更改。现在一个标签换行而另一个不换行:
如有任何帮助,我们将不胜感激!
问题是在单元格初始化时,单元格的宽度默认为 600,因此它会根据 600 的宽度计算行的高度。这是因为单元格是在故事板中创建的,大小为 类。
我认为这将是测试版中的一个错误,作为此问题的解决方案,请将您的单元格放入 xib,然后使用 .它会很好地工作。