Autoresizingmask、viewWillTransitionToSize 和旋转

Autoresizingmask, viewWillTransitionToSize and rotation

我有 parentViewController,它包含带有 customViewControllerautoresizing 掩码(灵活的宽度和高度)的 Container。容器的宽度约为 parentViewController 视图的 80%。 当我旋转设备时 viewWillTransitionToSize:withTransitionCoordinator: 被调用但大小为 "wrong"。我得到 parentsViewController 视图大小。

这是customViewController

的一部分
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    NSLog(@"viewWillTransitionToSize %@", NSStringFromCGSize(size));
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    [self resizeViewToWidth:size.width];
    [self performSelector:@selector(didRotate) withObject:nil afterDelay:1.0];
}

-(void)didRotate
{
    NSLog(@"didRotate %@", NSStringFromCGSize(self.view.frame.size));
}

//it creates this log
//viewWillTransitionToSize {667, 331}
//didRotate {617, 311}   //this is correct size after applying autoresizing masks

为什么当我看到至少两种不同尺寸时只调用一次? 如果 autoresizing masks 可以帮我计算视图大小,我不想计算。

如何让我先应用自动调整蒙版,然后在应用后获取尺寸?

在使用 自动调整掩码 时,使用 viewWillTransitionToSize 的正确方法是什么?

我按照下面的方法解决了。它实际上覆盖了自动调整大小掩码,但我找不到更好的解决方案,这符合我的要求。

我使用 UIContentContainer 的方法 sizeForChildContentContainer:withParentContainerSize:。在方法中,我检查子容器并应用与自动调整大小相同的更改。 magicNumber是自定义计算的缩写。

-(CGSize)sizeForChildContentContainer:(id<UIContentContainer>)container withParentContainerSize:(CGSize)parentSize
{
    if ([container isKindOfClass:[customViewController class]])
    {
        return CGSizeMake(parentSize.width - magicNumber, parentSize.height);
    }
    return [super sizeForChildContentContainer:container withParentContainerSize:parentSize];
}