Comme le montre l'image ci-dessous, lorsque vous voulez changer l'affichage / non-affichage de la marge supérieure en fonction de la condition dans ʻUITableView où
styleest
grouped`, vous avez fait un essai et une erreur, alors notez la méthode.
Affichage de la marge | Masquer les marges |
---|---|
Cette fois, je voulais éliminer la marge lors de l'affichage de l'en-tête comme l'image, et avoir la marge lorsque l'en-tête n'est pas affiché. .. ..
Le schéma qui était inutile pour le moment. .. .. Comme indiqué ci-dessous, lorsque ʻisHeaderShown est
true`, je définis l'en-tête dans la section 0 et la hauteur.
extension TableViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
guard section == 0 else {
return UITableView.automaticDimension
}
return isHeaderShown ? 50 : UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
guard section == 0 else {
return nil
}
return isHeaderShown ? HeaderView() : nil
}
}
résultat
Seul le premier affichage est bon, mais le deuxième temps et les suivants sont étranges. .. .. : froncer les sourcils2:
Méthode ci-dessus + J'ai essayé de jouer avec tableHeaderView
lors de la mise à jour de la table comme indiqué ci-dessous.
tableView.tableHeaderView = isHeaderShown ? UIView() : nil
tableView.reloadData()
résultat
Compris: tada:
Il semble que la méthode ci-dessus puisse être utilisée, mais si vous définissez l'en-tête uniquement en haut en premier lieu, j'ai pensé qu'il n'était pas nécessaire de définir View dans sectionHeader, et j'ai finalement fait comme suit.
extension TableViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
guard section == 0 else {
return UITableView.automaticDimension
}
return isHeaderShown ? CGFloat.leastNormalMagnitude : UITableView.automaticDimension
}
}
//Traitement au moment de la mise à jour
tableView.tableHeaderView = isHeaderShown ? HeaderView(frame: .init(origin: .zero, size: .init(width: 0, height: 50))) : nil
tableView.reloadData()
Le résultat était le même que le modèle 1, alors peut-être que ça va: clap:
Je pense qu'il est rare de vouloir une telle mise en page, mais j'espère que cela aide quelqu'un. Si vous connaissez un autre bon moyen, faites-le moi savoir: priez
J'ai entendu dire qu'il est préférable d'utiliser ʻUICollectionView plutôt que ʻUITableView
à l'avenir, et il ne serait peut-être plus bon d'encombrer la table trop. .. .. : en pensant:
Recommended Posts