Может быть много других способов, но я рекомендую вам сделать ваш ExpandableView
многоразовым для повышения производительности.
Прежде всего , упростите ваш ExpandableView
класс:
import UIKit
class ExpandableView: UITableViewHeaderFooterView {
@IBOutlet weak var userImgView: UIImageView!
@IBOutlet weak var userNamelbl: UILabel!
@IBOutlet weak var countLbl: UILabel!
@IBOutlet weak var rightArrowImgView: UIImageView!
var isExpanded = false
@IBOutlet weak var checkMarkView: UIImageView!
}
Пожалуйста, не пропустите, что суперкласс UITableViewHeaderFooterView
, а не UIView
.
Второй , проверьте настройки вашего ExpandableView.xib
:
Для пользовательского вида для определенного вида должно быть ExpandableView
.
Если вы не можете выбрать ExpandableView
из выпадающего списка, вам может потребоваться ввести вручную. Не забудьте проверить Inherit Module From Target .
Параметр пользовательского просмотра владельца файла должен быть пустым.
Если какой-то класс уже установлен, удалите его вручную.
Убедитесь, что все розетки правильно подключены к вашему ExpandableView
.
(Вам лучше подключить их все после того, как вы изменили свой xib.)
Возможно, вам потребуется реструктурировать иерархию представления и / или ограничения .
Третий , измените контроллер представления, удерживая представление таблицы.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableView.delegate = self
tableView.dataSource = self
//...
let nib = UINib(nibName: "ExpandableView", bundle: nil)
tableView.register(nib, forHeaderFooterViewReuseIdentifier: "ExpandableView")
tableView.estimatedSectionHeaderHeight = 60
tableView.sectionHeaderHeight = UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let expandabelView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "ExpandableView")
// Frame size should be represented with constraints.
return expandabelView
}