Je veux ajouter une vue personnalisée dans la TableViewheader. Mais lorsque j'exécute le code suivant, il crée un cycle et une application bloqués pour toute interaction utilisateur.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 60) let expandabelView = ExpandableView(frame: frame) return expandabelView }
3 Réponses :
Lorsque vous créez personnalisé uIView code>, il devrait suivre ceci si vous souhaitez l'utiliser init avec le cadre.
class CustomView: UIView {
//This should be contentview of your xib
@IBOutlet var view: UIView!
let nibName = "CustomView"
override init(frame: CGRect) {
super.init(frame: frame)
xibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
xibSetup()
}
private func xibSetup()
{
Bundle.main.loadNibNamed(nibName, owner: self, options: nil)
self.view.autoresizesSubviews = true
self.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(self.view)
self.view.frame = self.frame
}
}
Puisque vous devez image CODE> et définissez le masque automobile de la vue de contenu correctement
Il peut y avoir de nombreuses autres manières, mais je vous recommande de faire votre Tout d'abord strong>, simplifie votre ExpandableView Code> Classe: P> ExpandableView code> réutilisable pour améliorer les performances.
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
}
Excellente explication. Merci.
Toujours pas en train de travailler le même problème
init (codeur :) code> appelle
setupview () code> qui appelle
uinib (nibname: bundle :) code> il rappellera donc
init ( Codeur :) code>. Alors pourquoi appelez-vous
uinib (nibname: Bundle :) code> dans
initwithcoder code>?