在UINavigationController之上的iOS opaque UIViewController

时间:2014-06-09 16:04:10

标签: ios uiviewcontroller uinavigationcontroller

我正在尝试从UINavigationController呈现不透明的UIViewController。虽然视图是动画的,但它只是我想要它是不透明的。但是,当完成动画制作时,背景会变为灰色。当前一个视图是UIViewController时,我有这个工作。当我使用UINavigationController作为上一个视图时,我开始遇到这个问题。

切换到视图的代码:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:STORYBOARD_IPHONE bundle:nil];
UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:viewName];
[self presentViewController:viewController animated:YES completion:nil];

使呈现视图不透明的代码:

self.view.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.7];

我认为这可能与以下事实有关:呈现视图的类不是UINavigationController,而是UINavigationController中的UIViewController。所以我尝试使用self.navigationController presentViewController,但我得到了相同的结果。

如何修复此问题以使背景保持不透明?

以前带有嵌入式UIViewController的UINavigationController:

enter image description here

动画期间的样子:

enter image description here

动画后的样子:

enter image description here

1 个答案:

答案 0 :(得分:0)

这是我经常使用的例程,看看我感兴趣的视图背后有哪些视图:

// useful debugging method - send it a view and it will log all subviews
// can be called from the debugger
- (void) viewAllSubviews:(UIView *) topView Indent:(NSString *) indent  {
    for (UIView * theView in [topView subviews]){
        NSLog(@"%@%@", indent, theView);
        if ([theView subviews] != nil)
            [self viewAllSubviews:theView Indent: [NSString stringWithFormat:@"%@ ",indent]];
    }
}

我通常将它放在可以全局访问的地方。称之为

[self viewAllSubviews:rootViewController.view Indent:@"  "];

它将根据您提供的任何视图向控制台打印视图树,并根据级别缩进子视图。它应该只显示您感兴趣的对象背后的内容,并且可以检查每个视图的帧坐标。

这应该会为你提供一个很好的线索,了解背后的观点。