55 votes

Fond gris clair dans la "zone de rebond" d'un UITableView

Apple iPhone apps comme la Musique et la Contants utiliser une barre de recherche dans un UITableView. Lorsque vous faites défiler vers le bas de sorte que la barre de recherche se déplace vers le bas, l'espace vide au-dessus du défilement de l'affichage du contenu a un peu de gris couleur d'arrière-plan (voir capture d'écran).

Screenshot of Contacts app showing light gray background

(Notez que la barre de recherche a un peu plus foncée bord de la ligne à son sommet. Ce n'est pas là pour le défaut UISearchBar, mais sous-classement devrait prendre soin de cela.)

J'ai essayé le réglage de la couleur d'arrière-plan de la UITableView, mais qui affecte les lignes ainsi. Quelqu'un sait-il comment obtenir cet effet? Vais-je avoir à remplacer les mettre en œuvre drawRect: ou est-il intégré dans le chemin?

39voto

PeyloW Points 25312

Le réglage des transparents est mauvais pour la performance. Ce que vous voulez, c'est la zone grise au-dessus de la barre de recherche, mais elle doit rester blanche au-delà de la fin de la liste.

Vous pouvez ajouter une sous-vue à votre UITableView qui vit au-dessus du contenu.

 CGRect frame = self.list.bounds;
frame.origin.y = -frame.size.height;
UIView* grayView = [[UIView alloc] initWithFrame:frame];
grayView.backgroundColor = [UIColor grayColor];
[self.listView addSubview:grayView];
[grayView release];
 

Vous pouvez ajouter d'autres éléments de fantaisie à la vue si vous le souhaitez, par exemple un fondu ou une ligne de division sans sous-classement UISearchBar .

31voto

Nick Farina Points 1608

C'est l'un de mes trucs préférés.

 UIView *topview = [[[UIView alloc] initWithFrame:CGRectMake(0,-480,320,480)] autorelease];
topview.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:238.0/255.0 alpha:1];

[self.tableView addSubview:topview];
 

En gros, vous créez une grande vue de la taille de l’écran et vous la placez au-dessus de la zone de contenu. Vous ne pourrez jamais faire défiler au-delà.

Et ne vous inquiétez pas de l'impact mémoire d'un disque UIView de 320 x 480 pixels, il ne consommera pas de mémoire importante car le CALayer n'a pas de contenu significatif.

23voto

user2176995 Points 205

À partir d'iOS 7, vous pouvez modifier cela en modifiant la vue d'arrière-plan de la table.

 [self.tableView setBackgroundView:view];
 

faites en sorte que la couleur d'arrière-plan de la vue soit la même que celle de votre vue parent.

4voto

U62 Points 3575

J'ai seulement trouvé un moyen de le faire. Vous devez définir le backgroundColor de la UITableView de transparence, à l'ensemble de la backgroundColor de la cellule contentView quelle que soit la couleur que vous voulez le réel cellules, puis fondamentalement, vous devez obtenir de la lumière de couleur gris apparaissent derrière la UITableView. Cette dernière étape vous pouvez le faire en définissant la backgroundColour de la UIWindow, ou de tout ce qui est en contenant ou votre tableViewController.

Donc, en supposant que vous avez une vue contrôleur qui est dérivée à partir de UITableViewController, insérez ces lignes dans l' -(void)viewDidLoad méthode:-

// sets the background of the table to be transparent
self.tableView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.0];
// assuming we are inside a navigation or tab controller, set the background
self.parentViewController.view.backgroundColor = [UIColor lightGrayColor];

Puis à l'intérieur de la partie de la tableView:cellForRowAtIndexPath: qui crée de nouvelles cellules, d'ajouter:-

// set an opaque background for the cells 
cell.contentView.backgroundColor = [UIColor whiteColor];

3voto

Basheer_CAD Points 2087

Je vais vous donner la meilleure façon de le faire.
D'abord définir la couleur d'arrière-plan de la vue de la table à celui que vous voulez dans interface builder.
Alors répondre à la UITableView délégué tableView:willDisplayCell:ForIndexPath:méthode comme ceci

- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCelll*)cell forIndexPath:(NSINdexPath*)indexPath
{
     [cell setBackgroundColor:[UIColor whiteColor]];
}


Une autre Méthode est la suivante :
en ViewDidLoad méthode (ou n'importe où vous le souhaitez) définir l' tableView couleur d'arrière-plan de couleur claire comme ceci:

self.tableView.backgroundColor = [UIColor clearColor];

et puis définissez la superview de couleur blanc

self.tableView.superview.backgroundColor = [UIColor whiteColor];

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