UITableualEffectView在UITableView背景上

Z S*_*Z S 6 uitableview uikit ios8 uiblureffect

我正在创建一个UITableViewController(在UINavigationController的根目录下)并在另一个视图控制器上呈现这个模态.我在一定程度上工作,这样当视图加载和viewDidAppear被调用时,视觉效果看起来很好.但是在viewDidAppear之后,视觉效果消失了,tableview有一个白色背景.

在我提出的UITableViewController中,我在viewDidLoad中添加了这个:

if (NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) {
    self.tableView.backgroundColor = [UIColor clearColor];
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    [blurEffectView setFrame:self.tableView.frame];

    self.blurView = blurEffectView;
    self.tableView.backgroundView = self.blurView;
}
Run Code Online (Sandbox Code Playgroud)

我也实现了这一点,以确保单元格具有清晰的背景:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (NSClassFromString(@"UIVisualEffectView") ) {
        cell.backgroundColor = [UIColor clearColor];
    }
}
Run Code Online (Sandbox Code Playgroud)

我也设置了cell.backgroundColor = [UIColor clearColor]in tableView,cellForRowAtIndexPath:但这也无济于事.

同样,我在视图加载时获得了正确的效果,但是一旦它出现在屏幕上,它就会失去模糊背景.什么想法可能会出错?我还尝试将blueEffectView保留为视图控制器中的属性,但没有运气

Pet*_* W. 6

你在使用故事板吗?

选择以模态方式使用的视图控制器(或者如果它包装在另一个VC中,选择包装器)并将Presentation组合框设置为"Over Full Screen"或"Over Current Context".(我实际上并不知道区别是什么,他们似乎都做同样的事情.)

Xcode的屏幕截图

完成后,你的模糊效果应该是Just Work™.另外,我认为这是iOS 8中的新功能,我还没有在iOS 7中测试过这个.


Jor*_*n H 3

问题是,当您使用默认设置以模态方式呈现视图控制器时,一旦它完成接管屏幕,底层视图控制器似乎基本上被删除了。这就是为什么在演示动画完成之前您的模糊效果看起来很棒 - 底层视图消失。

要实现所需的行为,您需要将 Segue 呈现样式更改为保留底层视图控制器的样式,例如“全屏显示”而不是默认的“全屏显示”。

请注意,当您关闭此模式呈现时,viewDidAppear将不会在呈现视图控制器上调用,因为它现在始终可见。如果您在解雇时依赖该方法来执行任何功能,那么这可能会给您带来麻烦。