26

このポスターと同様の問題がありました。そして、jrturton の提案を使用して、ボタンをカスタマイズするためのコードを に移動しましたviewDidLayoutSubviews。このエラーを受け取るまではうまくいきました:

'NSInternalInconsistencyException'、理由: '-viewDidLayoutSubviews をビュー コントローラーに送信した後も、自動レイアウトが必要です。ViewController の実装では、自動レイアウトを呼び出すために -layoutSubviews をビューに送信する必要があります。

私はグラフィックスについて非常に無知であり、私が考えることができた唯一のことは置く[self.view layoutSubviews];ことでしたが、それは何も修正しませんでした. ストーリーボードで「自動レイアウト」のチェックを外すとうまくいきましたが、ボタンのサイズが変わってしまい、別の方法で修正できないかと思っていました。

コード:

-(void)viewDidLayoutSubviews {
    NSArray *arrayOfButtons = [NSArray arrayWithObjects:self.decimalButton, self.buttonOne, self.buttonTwo, self.buttonThree, nil];

    for (UIButton *button in arrayOfButtons) {

        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];

        button.layer.borderWidth = 0.25f;
        button.layer.borderColor = [[UIColor grayColor] CGColor];

        CAGradientLayer *btnGradient = [CAGradientLayer layer];
        btnGradient.frame = button.bounds;
        btnGradient.colors = [NSArray arrayWithObjects:
                              (id)[[UIColor colorWithRed:122.0f / 255.0f green:188.0f / 255.0f blue:255.0f / 255.0f alpha:1.0f] CGColor],
                              (id)[[UIColor colorWithRed:96.0f / 255.0f green:171.0f / 255.0f blue:248.0f / 255.0f alpha:1.0f] CGColor],
                              nil];
        [button.layer insertSublayer:btnGradient atIndex:0];
    }
}
4

1 に答える 1

66

viewDidLayoutSubviewsメッセージハンドラーを提供することにより、ストーリーボードによって作成されたビューのフレームをプログラムで調整したいときに、最近この問題が発生しました。[self.view layoutIfNeeded]例外メッセージの指示に従って、 の最後に追加しようとしましたが-viewDidLayoutSubviews、うまくいきました。

于 2013-07-02T07:28:13.163 に答える