1
ダイナミックな量のUILabels
(結果クエリの生成結果に基づいてプログラマチックに作成された)で展開可能なビューを作成しました。しかし、私は拡大ビューでどれだけ多くのUILabels
があるかに応じて拡大ビューの高さを変更することができません。拡張可能なセル、セルフサイジングの高さ
for loop
を使用すると、クエリ後の結果と同じ数のラベルを作成します。
は今、私はこのようなビューにそれらを置く:
for (index, _) in timesBetween2Stations.enumerated() {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 20))
cell.ExpandableView.addSubview(label)
label.translatesAutoresizingMaskIntoConstraints = false
label.center = CGPoint(x: cell.ExpandableView.frame.width/2, y: 0)
label.textAlignment = NSTextAlignment.center
var substationTime = timesBetween2Stations[index]?.time
let substation = timesBetween2Stations[index]?.station
substationTime = substationTime!.removeTrainTimeZeros()
label.text = substation! + " " + substationTime!
cell.ExpandableView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-(10)-[label]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label": label, "expandable": cell.ExpandableView]))
if (previousLabel == nil){
cell.ExpandableView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-(10)-[label]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label": label, "expandable": cell.ExpandableView]))
}
else {
cell.ExpandableView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[previousLabel]-(10)-[label]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["label": label, "previousLabel": previousLabel as Any]))
}
previousLabel = label
}
質問です - なぜそれが制約に従ってビューの高さをリサイズないのですか? lor
後
cell.setNeedsLayout()
cell.layoutIfNeeded()
または
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
::)
UITableViewを使用せず、各セルに1つのUILabelを配置すると、UILabelの自動レイアウトがuilabelのテキストの高さに応じてサイズ変更されます。 –
対象とする予定のiOSバージョンはどれですか?これは 'UIStackView'の完璧なユースケースと思われます。 – crizzis
@crizzisの最低iOSバージョンはiOS 9.0です – swifthero