3

わかった。私は他の誰かのコードを継承したので、CALayers について学んでいます。背景全体 (ツールバーを除く) を占めるビューと、ビューの下部近くの小さな四角形を占めるサブビューがあります。自動レイアウトを使用しようとしています。それは私が問題を抱えている背景ビューです。ビューのサイズ(320 x 505)を維持するために、幅と高さ、および高さと幅を取得するために知っている他のいくつかのことを固定しようとしました。レイヤーが私を台無しにしているのか、それとも他のビューなのかはわかりません. とにかく、ここに問題のコードがあります。自動レイアウトをオフにすると、幅と高さが正しくなります。自動レイアウトをオンにすると、幅と高さが負の数になり、ゼロに設定されます。これを修正する方法についてのアイデアはありますか?

    UIView *view = [self videoPreviewView];        
    CGRect bounds = [[self videoPreviewView] bounds];  //bounds gets set here
                                                       //values are same as below

    [self setCaptureManager:captureManager];

    AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:[captureManager session]];

    CALayer *viewLayer = [view layer];
    [viewLayer setMasksToBounds:YES];

   [captureVideoPreviewLayer setFrame:bounds];  //Use Autolayout off:  x=0, y=0, width=320, height=504
                                                //Use Autolayout on:   x=0, y=0, width=0, height=0

ありがとうございました。

4

1 に答える 1

7

自動レイアウトがオンの場合、サブビューの制約は viewDidLoad でまだ計算されていないため、フレームは CGRectZero に等しくなります。代わりに、フレーム設定コードを viewDidLayoutSubviews メソッドに移動する必要があります。

viewDidLayoutSubviews を説明するクラス リファレンスから:

ビューがサブビューをレイアウトしたばかりであることをView Controllerに通知します。

これは、自動レイアウトが制約を計算し、サブビューを配置するという仕事をした直後です。

于 2013-06-06T00:16:45.537 に答える