2011-06-09 5 views
6

Dans l'un de mon avis, je suis sur un UIWebView et j'aime les effets d'ombre par défaut sur le dessus et le bas de la vue d'arrière-plan, et aussi haut et en bas de la zone de défilement.UITableView Ombres haut et en bas

Il y a même dans l'application Horloge, avec un arrière-plan personnalisé (ligne bleue avec la carte du monde) donc il est possible à l'aide d'un UITableView aussi je suppose ...

Voici ce que j'ai avec moi web , et que j'aimerais ajouter à une vue de table. Mon point de vue web:

enter image description here

J'ajouté un arrière-plan personnalisé ici (la texture gris clair). Voici ci-dessous l'autre vue où j'ai ajouté le même fond, mais comme vous pouvez le voir il n'y a pas d'ombre ... Ce n'est pas un effet intégré comme un UIScrollView je suppose. Y at-il un moyen de faire la même chose avec une vue de la table?

Mon point de vue de la table:

enter image description here

MISE À JOUR 1:

J'ai trouvé ce grand article UITableView Shadows mais il n'y a pas d'ombre pour le fond de la vue.

Répondre

2

Cela fonctionne pour les UITableViewController et UIViewController. Dans mon viewDidLoad:-je utiliser le code suivant:

[self.view addSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shadow.png"]]]; 

Cela va ajouter l'ombre juste sous la barre de navigation.

Et voici mon ombre, je lançai ensemble dans Photoshop:

enter image description here

+0

Je suis celui-ci, je dois juste une ombre au fond de mon point de vue. Et cette vue est un contrôleur de navigation mais parfois chargé dans ma vue principale avec ma barre d'onglets, et aussi comme une vue modale sans barre d'onglets ... – Dachmt

3

un élément fondamental d'une vue est que c'est la couche qui est un CALayer. Vous pouvez y accéder par la propriété de la couche d'une vue:

myView.layer 

Dans les CALayers de documentation ont plusieurs propriétés qui contrôlent l'ombre. Vous devriez être capable de dire à la couche de la barre de navigation de projeter une ombre. Avec les couches de tout autre contenu que vous souhaitez projeter une ombre.

myView.layer.shadowOffset 
myView.layer.shadowRadius 

Vous devez vous assurer d'ajouter le cadre QuartzCore à votre projet pour accéder à cette propriété.

0

Mon code. Par exemple. pour l'ombre en bas de page:

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,tableView.bounds.size.width, 11)]; 

    UIImageView *shadow = [[UIImageView alloc] initWithImage:[UIImage 
                imageNamed:@"tableHeaderBottom"]]; 
    [shadow sizeToFit]; 
    [footerView addSubview:shadow]; 

    return footerView; 
} 

- (void)viewDidLoad 
{ 
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, -11, 0)]; 
    [super viewDidLoad]; 
} 

Les images:
Normal image Retina image

Pour l'en-tête: Utilisez le même code, mais il suffit de retourner l'image verticalement et utiliser viewForHeaderInSection sur la première section (0).

8

Voici mon code Swift Je pense que cela fonctionne bien:

func shadowView (view : UIView , r : CGFloat, gr : CGFloat , b : CGFloat , header : Bool) 
    { 
     let bottomColor = UIColor (red: r/255 , green: gr/255 , blue: b/255 , alpha: 0) 

     //var bottomColor = UIColor (red: (r/255), green : (g/255), blue : (b/255), alpha : 0) 
     //var topColor = UIColor (red: (r/255), green : (g/255), blue : (b/255), alpha : 1) 
     let topColor = UIColor (red: r/255, green: gr/255, blue: b/255, alpha: 1) 
     var arrayColors: [CGColor] = [ 
      topColor.CGColor, 
      bottomColor.CGColor 
     ] 

     if header 
     { 
      let headerShadow: CAGradientLayer = CAGradientLayer() 

      headerShadow.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height) 
      headerShadow.colors = arrayColors 
      view.layer.insertSublayer(headerShadow, atIndex: 1) 
     } else 
     { 
      let footerShadow: CAGradientLayer = CAGradientLayer() 

      arrayColors = [ 
       bottomColor.CGColor, 
       topColor.CGColor 
      ] 
      footerShadow.frame = CGRect(x: 0, y: 0 , width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height) 
      footerShadow.colors = arrayColors 
      view.layer.insertSublayer(footerShadow, atIndex: 1) 
     } 
    } 
Questions connexes