2010-10-30 7 views
3

Je cherche à insérer le contenu d'un NSTableView afin qu'il y ait un espace entre le haut de la vue table et la première cellule.NSTableView content view insert

Sur iOS, c'est facile avec UITableView - réalisé en utilisant setContentInset :.

+0

Que voulez-vous dire par «le haut de la vue de la table»? La vue d'en-tête? Ou voulez-vous l'écart au-dessus de la vue d'en-tête? –

+0

Il s'agit d'une vue de table sans vue d'en-tête. Je veux juste que la première cellule commence à une position que je définis. – firstresponder

Répondre

1

Réactivez les en-têtes et remplacez la vue d'en-tête par votre propre sous-classe. Surchargez son -drawRect: pour dessiner seulement votre couleur de fond. Remplacez également -headerRectOfColumn: pour empêcher l'affichage des en-têtes de colonne. Je ne suis pas sûr si cela empêche le glissement de la colonne ou le tri mais je parie que c'est le cas.

+1

Ceci a été choisi comme réponse mais n'agit pas de la même façon: l'en-tête de couleur sera toujours visible même si vous faites défiler vers le bas. – Dan2552

+0

Oui, ça sonnait comme si c'était ce que voulait l'affiche originale (surtout depuis qu'il a accepté la réponse). Comme il n'y a pas de propriété contentInset, c'est ce que vous obtiendrez le plus proche sans insérer de ligne factice ni définir une vue de cellule avec une taille/disposition de ligne de cas spéciale pour la condition row == 0. –

0

Ce n'est pas très propre mais vous pouvez y arriver en ayant la première rangée plus haut que le reste. Mettre en œuvre heightOfRow Table méthode déléguée:

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row 
{ 
    if (row == 0) { 
    return normalRowHeight + topPadding; 
    } else { 
    return normalRowHeight; 
    } 
} 

L'inconvénient est que vous devrez également mettre en œuvre sur mesure et mettre en évidence le dessin cellule personnalisée pour tenir compte de l'espace supplémentaire pour la première ligne.