web-dev-qa-db-fra.com

Supprime par programme l'en-tête de UITableView et redimensionne automatiquement le contenu pour remplir la zone supprimée

J'ai ajouté une UIButton dans la section d'en-tête de la UITableView via le générateur d'interface et souhaite supprimer l'accès au bouton dans certains cas. J'ai essayé d'utiliser la propriété .hidden = TRUE, mais elle masque simplement le bouton de la vue, laissant un espace blanc derrière. Comment est-ce que je supprime par programme l'en-tête de UITableView et que le contenu de la table est automatiquement redimensionné pour remplir la zone d'en-tête supprimée?

18
code007

Si vous souhaitez supprimer la vue en-tête de la table, définissez simplement la propriété myTable.tableHeaderView sur nil. Si ce que vous avez est en fait un en-tête de section, vous devez renvoyer nil à partir de la méthode viewForHeaderInSection et appeler [myTableView reloadData].

54
Bogatyr

Vous pouvez aussi faire:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0.0;
}

Cela semble fonctionner pour mon en-tête de section (unique) et évite le besoin de reloadData.

Notez que:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

est toujours appelé, mais sa valeur de retour semble être ignorée.

20
mts

J'ai créé une propriété booléenne appelée removeHeader et ensuite, chaque fois que je veux supprimer mon en-tête, j'appelle:

func removeSectionHeader() {
        removeHeader = true
        self.tableView.reloadData()
    }

Ensuite, lorsque mon tableView rechargera, elle appellera cette méthode de délégation tableView:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if removeHeader {
            return 0.0
        } else {
            let height = self.tableView.sectionHeaderHeight
            return height
        }
    }
0
Patrick Ridd