Ich verwende Swift 3. Ich habe erweiterbare Tabellenansichtszellen, aber ist es möglich, eine andere Zeilenhöhe zu erhalten, abhängig davon, auf welche Zelle geklickt wurde? Wenn beispielsweise auf die erste Zelle geklickt wird, möchte ich, dass sie 420 für die Höhe zurückgibt, und wenn andere Zellen angeklickt werden, möchte ich, dass sie 300 für die Höhe zurückgibt.Swift 3 - Bedingte erweiterte Tabellenansicht Zellenhöhe
Hier ist meine Zellklasse.
class ResultsCell: UITableViewCell {
@IBOutlet weak var introPara : UITextView!
@IBOutlet weak var section_heading : UILabel!
class var expandedHeight : CGFloat = { get { return 420.0 } }
class var defaultHeight : CGFloat { get { return 44.0 } }
var frameAdded = false
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func awakeFromNib() {
super.awakeFromNib()
section_heading.translatesAutoresizingMaskIntoConstraints = false
}
func checkHeight() {
introPara.isHidden = (frame.size.height < ResultsCell.expandedHeight)
}
func watchFrameChanges() {
if(!frameAdded) {
addObserver(self, forKeyPath: "frame", options: .new, context: nil)
checkHeight()
}
}
func ignoreFrameChanges() {
if(frameAdded){
removeObserver(self, forKeyPath: "frame")
}
}
deinit {
print("deinit called");
ignoreFrameChanges()
}
// when our frame changes, check if the frame height is appropriate and make it smaller or bigger depending
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "frame" {
checkHeight()
}
}
}
Was ich versucht habe, ist so etwas.
var _expandedHeight : CGFloat = 420.0
class var expandedHeight : CGFloat { get { return _expandedHeight } set (newHeight) { _expandedHeight = newHeight } }
var isRow0 = false
override func awakeFromNib() {
super.awakeFromNib()
section_heading.translatesAutoresizingMaskIntoConstraints = false
if isRow0 {
ResultsCell.expandedHeight = 300.0
}
else {
ResultsCell.expandedHeight = 420.0
}
}
Und dann in dem TableViewController
...
// return the actual view for the cell
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let resultcell = tableView.dequeueReusableCell(withIdentifier: "resultCellTemplate", for: indexPath) as! ResultsCell
if indexPath.row == 0 {
resultcell.isRow0 = true
} else {
resultcell.isRow0 = false
}
return resultcell
}
Aber ich bin immer Fehler auf dem Getter/Setter Linie: instance member _expandedHeight cannot be used on type ResultsCell
Wie kann ich das Verhalten erreichen, was ich will?