使用启用的Storyboard自动布局function,无法在iOS6中自定义UIButton

我面对奇怪的行为。 我正在使用自定义样式的button,我在我的控制器中设置:

- (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中正常工作。但是,如果我为启用了故事板的Autolayout的iOS 6构build了此版本,那么渐变的风格消失/变为透明(但标题仍然可见)。

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

在viewDidLoad中,在自动布局下,你的视图还没有框架,所以你正在使图层有一个CGRectZero框架。

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