iOS8-在UINavigationController上按下UIViewController并旋转设备后,上一个view controller中的大小错误
我有一个iOS8-在UINavigationController上按下UIViewController并旋转设备后,上一个view controller中的大小错误,ios,objective-c,uiviewcontroller,uinavigationcontroller,viewwilltransitiontosize,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,Viewwilltransitiontosize,我有一个UINavigationController根UIViewController(“根”) 根视图控制器推送另一个UIViewController“子视图”。当“child”UIViewController出现在屏幕上时,我会旋转设备,并期望“root”视图控制器相应地调整大小,但这不会发生。在根视图控制器中放置断点后: -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewC
UINavigationController
根UIViewController
(“根”)
根视图控制器推送另一个UIViewController
“子视图”。当“child”UIViewController
出现在屏幕上时,我会旋转设备,并期望“root”视图控制器相应地调整大小,但这不会发生。在根视图控制器中放置断点后:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
-(void)视图将转换大小:(CGSize)带有转换协调器的大小:(id)协调器{
[super ViewWillTransitionSize:size with TransitionCoordinator:coordinator];
}
我发现大小不对,根视图控制器不能正确调整以适应变化
有没有人经历过这种行为
守则如下:
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
/// The size is wrong if this view controller is off screen
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
}
-(void)ViewWillTransitionOnSize:(CGSize)带有TransitionCoordinator:(id)coordinator的大小{
///如果此视图控制器不在屏幕上,则大小错误
[super ViewWillTransitionSize:size with TransitionCoordinator:coordinator];
}
-(无效)未收到记忆警告{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
@结束
这是旋转设备后大小的NSLog打印屏幕-这是来自模拟器,但在设备上的行为相同
可能只有窗户旋转。如果你像这样打印,它总是正确的,因为我已经测试过了
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
UIWindow *screen = [[[UIApplication sharedApplication] delegate] window];
CGSize mainWindowSize = screen.bounds.size;
NSLog(@"Main window size is %@",NSStringFromCGSize(mainWindowSize));
}];
[coordinator AnimateLongsideTransition:^(id上下文)
{
}完成:^(id上下文)
{
UIWindow*屏幕=[[UIApplication sharedApplication]委托]窗口];
CGSize mainWindowsSize=screen.bounds.size;
NSLog(@“主窗口大小为%@”,NSStringFromCGSize(MainWindowsSize));
}];
我的项目也有同样的问题。
当您调用以下命令时,UINavigationController和uitabarcontroller(可能是所有的viewController?)似乎给了这些孩子错误的大小:
“[super ViewWillTransitionOnSize:size with TransitionCoordinator:coordinator];”
我通过在我的tabBarController和导航栏控制器子类(两者中的代码相同)中重写“ViewWillTransitionOnSize:withTransitionCoordinator:”修复了这个问题
-(void)视图大小:(CGSize)大小
withTransitionCoordinator:(id)协调员
{
用于(UIViewController*aViewController在self.viewControllers中)
{
[aViewController视图将转换大小:大小
带传递协调员:协调员];
}
如果([self-presentedViewController])
{
[[self-presentedViewController]视图将转换为大小:大小
带传递协调员:协调员];
}
}
我不确定这是不是最好的方法,如果你找到更好的方法,请告诉我。你的尺码记录是多少,你期望什么?我将在旋转设备几次后添加一个打印屏幕。请注意,大小始终相同。是的,大小始终相同,看起来根视图控制器根本不旋转。是的。看起来像一个bug@AvnerBarr您是如何解决此问题的?我正在将以前的will/didRotate中的一些代码移植到新的viewwillTransitionOnSize。我正在使用UINavigationController进行向下搜索导航,当设备旋转时,我需要在所有堆叠的控制器中执行一些操作。这是一种攻击。我不想把它放在20个视图控制器中,所有视图控制器都将当前大小转储到日志中。在这段代码中还没有任何效果。@诺曼,这段代码对我有效,它被放在上一个视图控制器中,该视图在屏幕外,如果你旋转当前视图,日志是正确的。
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
for (UIViewController* aViewController in self.viewControllers)
{
[aViewController viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
if ([self presentedViewController])
{
[[self presentedViewController] viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
}