ios - 无法在启用 Storyboard自动布局的 iOS6 中执行自定义 UIButton

标签 ios uibutton ios6 custom-controls gradient

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

- (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 的自动布局,那么我的样式中的渐变消失/变得透明(但标题仍然可见)。

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

最佳答案

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

您需要将这段代码,或者至少是您设置渐变图层框架的部分,移动到 viewDidLayoutSubviews 或类似的地方。

关于ios - 无法在启用 Storyboard自动布局的 iOS6 中执行自定义 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368197/

相关文章:

iphone - 在多个 iOS 设备上同时触发事件

xcode - 带 Storyboard的 ViewDeck

iOS 应用版本 : Bundle identifier error?

ios - UIButton action(rx.tap) 用 RxSwift 响应不同的 PublishSubjects

ios - 停止 UIButton 在背景图像更改时调整大小

ios - 声明的方法必须返回 void(不是 float)

ios - 如何插入与另一个相关的核心数据记录?

layout - UICollectionView 自定义布局

iphone - AutoLayout 的 UITableViewCell 性能不佳

ios - 带有选项字典崩溃应用程序的 UIGraphicsBeginPDFContextToFile