Я пытаюсь получить UITableView
из UITableViewCells
, который включает в себя ярлык элемента с кнопкой рядом с ним. Когда таблица первоначально загружена, она просто показывает метку и кнопку, но когда кнопка нажата, я бы хотел, чтобы textView
увеличился, а высота строки для этой одной ячейки увеличилась.
Я использую конструктор интерфейса и автоматически устанавливаю высоту строки. Я начинаю с textView
в IB с высотой 0
, поэтому я могу ограничить высоту ячейки до 5 от нижней части textView
. Мой план состоял в том, чтобы изменить высоту textView
(textView.frame.size.height = 100
), и высота строки автоматически увеличится. Но этого не происходит.
Я рассмотрел множество разных способов, но большая часть моего поиска в Google заканчивается вопросами о динамическом увеличении высоты текста при наборе текста, а это не то, что мне нужно. Я хотел бы опубликовать некоторый код, но я пробовал так много разных вещей (примерная высота строки, ручная настройка фрейма ячейки, делегатов и протоколов, tableView.reloadData()
, tableView.recalculateRowHeight()
, ручная настройка высоты строки и т. Д. И убежище). не добились большого успеха. Если я смогу получить совет о том, как лучше всего это сделать, я опубликую пример кода, если у меня все еще будут проблемы. В лучшем случае это будет анимация, но на данный момент мне не нужно это анимированный.
Я добавил ссылку на проект GitLab: https://gitlab.com/vever343/expandingrow
(в этом примере кода я начинаю с высоты textView
, равной 10, а затем увеличиваю ее кнопкой)
TableViewController
код:
import UIKit
class MainVC: UIViewController, UITableViewDelegate, UITableViewDataSource, cellProtocol {
@IBOutlet weak var tableView: UITableView!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? TableViewCell {
cell.delegate = self
return cell
} else {
return TableViewCell()
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func rowExpanded() {
tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
}
UITableViewCell
Код:
import UIKit
protocol cellProtocol {
func rowExpanded()
}
class TableViewCell: UITableViewCell {
@IBOutlet weak var textView: UITextView!
var delegate:MainVC?
override func awakeFromNib() {
super.awakeFromNib()
}
@IBAction func buttonPressed(_ sender: Any) {
textView.frame.size.height = 100
delegate?.rowExpanded()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}