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 :

通知视图控制器它的视图刚刚布置了它的子视图。

正是在自动布局完成计算约束并将子视图放置到位之后。

于 2013-06-06T00:16:45.537 回答