Ich kann Ihnen ein Beispiel geben, das Ihr Problem lösen kann. Ich verwende SnapKit https://github.com/SnapKit/SnapKit, um Einschränkungen von UIView
zu aktualisieren. Dies ist ein Beispiel für UIViewController
, wo Sie wollen Ihren Tisch zeigen:
class ViewController: UIViewController {
private var tableView : UITableView = {
let tabView = UITableView.init(frame: CGRect.zero)
tabView.register(TableViewCell.self, forCellReuseIdentifier: "cell")
return tabView
}()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
self.tableView.delegate = self
self.view.addSubview(self.tableView)
}
override func updateViewConstraints() {
self.tableView.snp.remakeConstraints { (maker) in
maker.edges.equalTo(self.view) // your table will have the same frame as your view
}
super.updateViewConstraints()
}
}
In der ersten Erweiterung werden wir alle Methoden für UITableViewDelegate
setzen:
extension ViewController : UITableViewDelegate {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 200.0 // any value different from zero. 200 is an example. This value must be easy-to-calculate.
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension // tells system that rows will be resized automatically
}
}
In der zweiten Erweiterung gibt es Methoden für UITableViewDataSource
(nur zu erzeugen, einige Zufallsdaten):
extension ViewController : UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.setup(labelText: "Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label ", textViewText: "Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text ")
return cell
}
}
und Klasse der Zelle, die UILabel
undenthält:
class TableViewCell: UITableViewCell {
private var label : UILabel = {
let resultLabel = UILabel.init(frame: CGRect.zero)
resultLabel.numberOfLines = 0 // If numberOfLines in 0 system will automatically set real number of lines
return resultLabel
}()
private var textView : UITextView = {
let resultTextView = UITextView.init(frame: CGRect.zero)
resultTextView.isScrollEnabled = false // disable scroll and editing just for example
resultTextView.isEditable = false
return resultTextView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(self.label)
self.contentView.addSubview(self.textView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setup(labelText:String, textViewText:String) {
self.label.text = labelText
self.textView.text = textViewText
self.setNeedsUpdateConstraints()
}
override func updateConstraints() {
self.label.snp.remakeConstraints { (maker) in
maker.left.equalTo(self.contentView.snp.left)
maker.right.equalTo(self.contentView.snp.right)
maker.top.equalTo(self.contentView.snp.top)
maker.bottom.equalTo(self.textView.snp.top)
}
self.textView.snp.remakeConstraints { (maker) in
maker.left.equalTo(self.contentView.snp.left)
maker.right.equalTo(self.contentView.snp.right)
maker.bottom.equalTo(self.contentView.snp.bottom)
}
super.updateConstraints()
}
}
Sie haben geschrieben, dass Autolayout deaktiviert ist, aber Sie fügen es manuell in Code hinzu? Was meinen Sie? –
Legen Sie diese Eigenschaften fest. tableView.RowHeight = UITableView.AutomaticDimension; tableView.EstimatedRowHeight = 160f; // nach deiner Zelle. Höhe für Textansicht berechnen. Wie in diesem Link: https://StackOverflow.com/A/25158206/1242673 gelten berechnete Höhe TextView. –
@RomanPodymov ich habe? Entschuldigung, ich bin neu in der iOS-Entwicklung und habe die Aufgabe, eine Textansicht auf den Inhalt anzupassen. Und mir wurde gesagt, Autolayout ist ausgeschaltet. – elpatricko