以前的UIViewController在iOS7上以模态方式呈现时会渗透

时间:2015-09-30 16:22:10

标签: ios objective-c iphone uiviewcontroller

当使用storyboard segue以模态方式呈现ViewController时,之前的ViewController会渗透。

UIViewController B以模态方式呈现UIViewController C.他们都有UIScrollView(如果重要的话)。当我到达ViewController C时,它几乎就像整个视图只是一点点小,以便前一个ViewController流血。它看起来像这样:

1

底部浅灰色是前一个控制器的一部分。我实际确认它的方式是前一个视图控制器是我添加了这个方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   NSLog(@"I'm being touched!");
}

这仅发生在iOS 7中,而不发生在iOS 8上。

1 个答案:

答案 0 :(得分:1)

好吧,原来发生这种情况的原因是因为我在appdelegate中有类似的东西来获取黑色状态栏:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

    [application setStatusBarStyle:UIStatusBarStyleLightContent];
     [application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

    self.window.clipsToBounds =YES;            
    self.window.frame =CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}

这是一个问题,因为它正在改变整个窗口大小。它没有在第一个视图中引起问题,但由于某种原因,它在模态segue期间引起了问题。所以为了修复它,我把它改成了类似的东西:

if (IS_IOS7) {
        UIView *addStatusBar = [[UIView alloc] init];
        addStatusBar.frame = CGRectMake(0, 0, 320, 20);
        addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //You can give your own color pattern
        [self.window.rootViewController.view addSubview:addStatusBar];
    }

这种方法看起来效果更好,因为我只是在框架顶部添加一个黑色的UIView,而不是改变窗口大小。这使窗口尺寸保持不变,不再渗透。