Je veux supprimer la marge supérieure dans UITableView de Grouped (swift)

Xcode-12.0iOS-14.0Swift-5.3

introduction

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 styleestgrouped`, vous avez fait un essai et une erreur, alors notez la méthode.

Affichage de la marge Masquer les marges
success_1 success_2

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é. .. ..

Mauvais modèle

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

failure

Seul le premier affichage est bon, mais le deuxième temps et les suivants sont étranges. .. .. : froncer les sourcils2:

Motif 1 qui semble bon

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

success

Compris: tada:

Motif 2 qui semble bon

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:

en conclusion

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

Je veux supprimer la marge supérieure dans UITableView de Grouped (swift)
Je veux obtenir la valeur en Ruby
Je veux intégrer n'importe quel TraceId dans le journal
Je veux retourner la position de défilement de UITableView!
Je souhaite passer au même écran dans l'état enregistré
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Raccourcissez l'UUID en base64 dans Swift.
Je veux utiliser @Autowired dans Servlet
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
[Swift 5] Traitement pour fermer le clavier sur UITableView
[Swift] Je veux dessiner des lignes de quadrillage (carrés)
Je souhaite envoyer un e-mail en Java.
J'ai essayé d'organiser la session en Rails
Je veux var_dump le contenu de l'intention
Je souhaite transmettre APP_HOME pour me connecter à Gradle
rsync4j --Je veux toucher rsync en Java.
Je veux être finalement même à kotlin
Je veux tronquer après la virgule décimale
Vous pouvez ne pas vouloir utiliser la méthode remove sur ArrayList très souvent
J'étais accro à NoSuchMethodError dans Cloud Endpoints
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Je veux faire quelque chose comme "cls" en Java
[Java] Je souhaite calculer la différence par rapport à la date
Tokoro j'ai réécrit dans la migration de Wicket 7 à 8
Je veux aussi utiliser des coquillages à Laradock! !!
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Je veux juger la gamme en utilisant le diplôme mensuel
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je souhaite utiliser le mode sombre avec l'application SWT
[Active Admin] Je souhaite spécifier l'étendue de la collection à afficher dans select_box
Je souhaite définir une fonction dans la console Rails
Je veux placer RadioButtons dans le même RadioGroup à n'importe quelle position de l'écran
[Swift] Je veux faire quelque chose comme sprinftf de C
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
Je veux arrêter les cas de serpent avec des définitions de table
Je veux appeler la méthode principale en utilisant la réflexion
Je veux cliquer sur une broche GoogleMap dans RSpec
# 1_JAVA Je veux obtenir le numéro d'index en spécifiant un caractère dans la chaîne de caractères
[Commentaire approximatif] Je veux épouser la méthode du pluck
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Je souhaite simplifier la sortie du journal sur Android