Autoresizingmask、viewWillTransitionToSize 和旋转
Autoresizingmask, viewWillTransitionToSize and rotation
我有 parentViewController
,它包含带有 customViewController
和 autoresizing
掩码(灵活的宽度和高度)的 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];
}
我有 parentViewController
,它包含带有 customViewController
和 autoresizing
掩码(灵活的宽度和高度)的 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];
}