0

我试图给我的背景视图中的每个标签一个阴影:

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

问题是在我的背景视图中有一些子视图(例如表格视图),其中单元格的标签不应该得到这个 shadowColor。

我这样做了:

[[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]];

但是文本阴影仍然存在于表格视图的单元格中。

谁能告诉我我做错了什么?!?

4

3 回答 3

2

您根本不能使用 UIAppearance 代理来自定义 UILabel。看到这个问题。根据我的经验,尝试这样做会导致不一致和令人困惑的结果。

(我还看到了设置appearanceWhenContainedIn:[somethingElse]UILabel 导致所有其他[UILabel appearance]调用被忽略的问题)

于 2012-08-07T04:19:51.380 回答
1

我将创建一个 UILabel 的子类并在其上设置阴影外观。

于 2012-02-16T12:05:45.643 回答
-2

我认为你有两个选择:

  1. 您可以将修改后的控件包含在自己的容器中并使用:

    @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
    

    更改将仅应用于托管在 ChildViewController 容器中的 UILabel 实例

  2. 或者您可以按照建议对 UILabel 进行子类化,以避免在当前容器中链接外观更改(因此单元格中的其他标签不受影响)。

于 2012-03-05T10:08:10.980 回答