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

标签 ios objective-c iphone uiviewcontroller

当使用 Storyboard转场以模态方式呈现 ViewController 时,之前的 ViewController 会渗漏。

UIViewController B 模态呈现 UIViewController C。他们都有 UIScrollView(如果重要的话)。当我到达 ViewController C 时,整个 View 几乎都变小了一点点,以至于之前的 ViewController 渗漏了。它看起来像这样:

1

底部的浅灰色是之前 Controller 的一部分。我实际确认它是以前的 View Controller 的方式是我向它添加了这个方法:

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

这只发生在 iOS 7 而不是 iOS 8。

最佳答案

好吧,原来发生这种情况的原因是因为我在 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);
}

这是一个问题,因为它改变了整个窗口的大小。它在第一个 View 中没有引起问题,但出于某种原因,它在模态转场期间引起了问题。因此,为了修复它,我将其更改为类似于以下内容:

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。这使窗口大小保持不变,并且不再流血。

关于ios - 以前的 UIViewController 在 iOS7 上以模态方式呈现时会渗漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32871118/

相关文章:

objective-c - 如何在 Objective-C 中将 float 格式化为 2 位小数

iphone - Push ViewController 带模态动画(水平翻转)

iphone - 我应该保持 Sqlite 连接打开吗?

objective-c - 如何将工具栏添加到 UITableView obj-c/ios/xcode 的底部

ios应用程序随机崩溃

objective-c - 我的dispatch_async加载大量数据有什么问题

iphone - 我可以垂直显示 UISegmentedControl 对象吗?

ios - 在 cellForRowAtIndexPath 为不同的行高设置行高

ios - 如何在 watchOS 3 上进行快速可用性检查

ios - iOS中的3des加密解密