複数の行を折り返すテキストをすべて含めることができる、UITableViewCell
垂直に積み重ねられた多数のsを持つカスタムが必要です。UILabel
iOS9の新UIStackView
機能とセルのセルフサイジング メカニズムにより、これは簡単だと思いましたが、機能させることができません。Xcode 7beta3 を使用しています。
簡単なテストアプリを作成しました。これは IB でのセットアップです。
はand と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
}
}
ベータ版にバグがあるのではないかと思います。ラベルの 1 つが折り返され、もう 1 つが折り返されないことがあるためです。
たとえば、次のようUIStackView
に別のものをネストしようとしました。UIStackView
コードの変更はまったく行いませんでした。現在、一方のラベルは折り返されていますが、もう一方は折り返されていません。
どんな助けでも大歓迎です!