207 votes

Est-il possible de désactiver les en-têtes flottants dans UITableView avec UITableViewStylePlain ?

J'utilise un UITableView pour mettre en page le contenu des "pages". J'utilise les en-têtes de la vue tableau pour mettre en page certaines images, etc. et je préférerais qu'ils ne flottent pas, mais restent statiques, comme c'est le cas lorsque le style est défini comme suit UITableViewStyleGrouped .

Autre que l'utilisation UITableViewStyleGrouped existe-t-il un moyen de le faire ? J'aimerais éviter d'utiliser l'option groupée, car elle ajoute une marge à toutes mes cellules et nécessite la désactivation de l'affichage en arrière-plan pour chacune des cellules. J'aimerais avoir le contrôle total de ma mise en page. L'idéal serait une "UITableViewStyleBareBones", mais je n'ai pas vu cette option dans la documentation...

Merci beaucoup,

1 votes

63 votes

Utiliser le style de table UITableViewStyleGrouped - voici la réponse pour tous ceux qui cherchent à désactiver les en-têtes flottants et ne lisent pas toute la question (cela m'est arrivé...).

0 votes

@Kasztan C'est une solution de ligne zéro qui fonctionne très bien ! Merci.

1voto

David M. Brown Points 1084

Une autre façon de procéder est de créer une section vide juste avant celle où vous voulez placer l'en-tête et de placer votre en-tête sur cette section. Comme la section est vide, l'en-tête défilera immédiatement.

1voto

Lee Lam Points 91

Vous pouvez ajouter une section (avec zéro ligne) au-dessus, puis définir la sectionFooterView ci-dessus comme la headerView de la section actuelle, la footerView ne flotte pas. J'espère que cela vous aidera.

0voto

imnk Points 2576

Ignorer le XAK. N'exploitez aucune méthode privée si vous voulez que votre application ait une chance d'être acceptée par Apple.

C'est plus facile si vous utilisez Interface Builder. Vous devez ajouter un UIView en haut de la vue (où les images seront placées), puis ajouter votre tableview en dessous. IB doit le dimensionner en conséquence, c'est-à-dire que le haut du tableau touche le bas de l'UIView que vous venez d'ajouter et que sa hauteur couvre le reste de l'écran.

L'idée est que si cette UIView ne fait pas réellement partie de la vue tableau, elle ne défilera pas avec la vue tableau, c'est-à-dire qu'elle ignorera l'en-tête de la vue tableau.

Si vous n'utilisez pas le constructeur d'interface, c'est un peu plus compliqué, car il faut que le positionnement et la hauteur soient corrects pour le tableau.

0voto

Raphael Oliveira Points 1711

Consultez la réponse comment mettre en place des en-têtes avec StoryBoard : Vues de l'en-tête du tableau dans les StoryBoards

Notez également que si vous n'implémentez pas

viewForHeaderInSection:(NSInteger)section

il ne flottera pas, ce qui est exactement ce que vous voulez.

0voto

raf Points 1407

Une variation de la solution de @samvermette :

/// Allows for disabling scrolling headers in plain-styled tableviews
extension UITableView {

    static let shouldScrollSectionHeadersDummyViewHeight = CGFloat(40)

    var shouldScrollSectionHeaders: Bool {
        set {
            if newValue {
                tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: bounds.size.width, height: UITableView.shouldScrollSectionHeadersDummyViewHeight))
                contentInset = UIEdgeInsets(top: -UITableView.shouldScrollSectionHeadersDummyViewHeight, left: 0, bottom: 0, right: 0)
            } else {
                tableHeaderView = nil
                contentInset = .zero
            }
        }

        get {
            return tableHeaderView != nil && contentInset.top == UITableView.shouldScrollSectionHeadersDummyViewHeight
        }
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X