2

我遇到了奇怪的行为。我正在使用我在控制器中设置的自定义样式按钮:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.signOutButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self.signOutButton setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];

    CAGradientLayer *btnGradient = [CAGradientLayer layer];
    btnGradient.frame = self.signOutButton.bounds;
    btnGradient.colors = [NSArray arrayWithObjects:
                          (id)[[UIColor colorWithRed:102.0f / 255.0f green:102.0f / 255.0f blue:102.0f / 255.0f alpha:1.0f] CGColor],
                          (id)[[UIColor colorWithRed:51.0f / 255.0f green:51.0f / 255.0f blue:51.0f / 255.0f alpha:1.0f] CGColor],
                          nil];

    [self.signOutButton.layer insertSublayer:btnGradient atIndex:0];
}

它在 iOS 5 中运行良好。但如果我为 iOS 6 构建这个并为 Storyboard 启用了自动布局,那么我的样式中的渐变会消失/变得透明(但标题仍然可见)。

如果我禁用自动布局 - 渐变又回来了。有人可以用自动布局解释这种行为吗?

4

1 回答 1

10

在 viewDidLoad 中,在自动布局下,您的视图还没有框架,因此您正在使图层具有CGRectZero.

您需要将此代码或至少将渐变层的框架设置为viewDidLayoutSubviews或类似的部分移动。

于 2012-11-16T19:18:32.300 回答