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 では問題なく動作します。ただし、ストーリーボードの Autolayout を有効にして iOS 6 用にこれをビルドすると、スタイルのグラデーションが消える/透明になります (ただし、タイトルは表示されたままになります)。

自動レイアウトを無効にすると、グラデーションが復活します。誰かが自動レイアウトでそのような動作を説明できますか?

4

1 に答える 1

10

viewDidLoadのautolayoutでは、ビューにはまだフレームがないため、レイヤーに。のフレームを作成していますCGRectZero

このコード、または少なくともグラデーションレイヤーのフレームを設定する部分を、viewDidLayoutSubviewsまたは同様に移動する必要があります。

于 2012-11-16T19:18:32.300 に答える