Autoresizingmask,viewWillTransitionToSize和rotation

时间:2015-07-28 11:53:08

标签: ios rotation autoresizingmask viewwilltransitiontosize

我有parentViewController并且它包含带有customViewController且带有autoresizing掩码的容器(灵活的宽度和高度)。容器的宽度约为parentViewController视图的80%。 当我旋转设备viewWillTransitionToSize:withTransitionCoordinator:被调用但是“错误”大小时。我得到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 mask 可以为我做这件事,我不想计算视图大小。

如何首先应用 自动调整遮罩 ,然后在申请后获取尺寸?

使用 自动调整遮罩 时使用viewWillTransitionToSize的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我按照方式解决了。它实际上是覆盖自动调整掩模,但我无法找到更好的解决方案,这符合我的要求。

我使用UIContentContainer的方法sizeForChildContentContainer:withParentContainerSize:。在方法I中检查子容器并应用与自动调整相同的更改。 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];
}