Question

Je suis en train de donner à chaque étiquette à mon avis de fond une ombre:

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];

Le problème est que, à mon avis d'arrière-plan il y a quelques subviews (un tableview par exemple) qui les étiquettes de cellules doivent pas obtenir ce shadowColor.

J'ai essayé en le faisant:

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];
[[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil] setShadowColor:[UIColor clearColor]];

Mais le texte ombre existe encore dans les cellules des tableviews.

Quelqu'un peut-il me dire ce que je fais mal?!?

Était-ce utile?

La solution

Je voudrais créer une sous-classe de UILabel et définir l'apparence d'ombre sur ce point.

Autres conseils

Vous ne pouvez pas utiliser le proxy UIAppearance pour personnaliser UILabel du tout. Voir cette question. Toute tentative de le faire, dans mon expérience, conduit à des résultats incohérents et confus.

(j'ai vu aussi le problème où la mise appearanceWhenContainedIn:[somethingElse] sur UILabel provoque tous les autres appels [UILabel appearance] à ignorer)

Je pense que vous avez deux options:

  1. Vous pourriez inclure que les contrôles modifiés dans le propre récipient et utilisation:

    @implementation ChildViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowOffset:CGSizeMake(5.0, 5.0)];
    }
    
    @end
    

    Les changements seront appliqués uniquement aux instances UILabel hébergé dans le conteneur ChildViewController

  2. Ou vous pouvez sous-classe UILabel comme suggéré d'éviter enchaînant les changements d'apparence au sein de votre conteneur actuel (si d'autres étiquettes dans, par exemple dans les cellules ne sont pas affectées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top