UITableView背景上的UIVisualEffectView

UITableView背景上的UIVisualEffectView,uitableview,uikit,ios8,uiblureffect,Uitableview,Uikit,Ios8,Uiblureffect,我正在创建一个UITableViewController(在UINavigationController的根目录下),并在另一个视图控制器上以模态的方式呈现它。我让它在一定程度上工作,这样当视图加载并调用ViewDidDisplay时,视觉效果看起来很好。但是在ViewDid出现之后,视觉效果消失,tableview有一个白色背景 在我展示的UITableViewController中,我在viewDidLoad中添加了以下内容: if (NSClassFromString(@"UIVisual

我正在创建一个UITableViewController(在UINavigationController的根目录下),并在另一个视图控制器上以模态的方式呈现它。我让它在一定程度上工作,这样当视图加载并调用ViewDidDisplay时,视觉效果看起来很好。但是在ViewDid出现之后,视觉效果消失,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;
}
我还实现了这一点,以确保单元格具有清晰的背景:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (NSClassFromString(@"UIVisualEffectView") ) {
        cell.backgroundColor = [UIColor clearColor];
    }
}
我还在tableView的
cellforrowatinexpath:
中设置了
cell.backgroundColor=[UIColor clearColor]
,但这也没有帮助


同样,当视图加载时,我得到了正确的效果,但它一出现在屏幕上就失去了模糊背景。你知道哪里出了问题吗?我还尝试将blueEffectView作为属性保留在我的视图控制器中,但运气不佳

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

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


请注意,当您关闭此模式演示时,将不会在演示视图控制器上调用
viewdideappear
,因为它现在始终可见。如果你在被解雇时依靠这种方法来执行任何功能,这可能会对你造成伤害。

你在使用故事板吗

选择modally使用的视图控制器(或者如果它被包装在另一个VC中,请选择包装器),并将演示组合框设置为“超全屏”或“超当前上下文”。(我不知道到底有什么区别,他们似乎做了同样的事情。)


完成此操作后,模糊效果应该可以正常工作™. 另外,我认为这在iOS 8中是新的,我还没有在iOS 7中测试过这一点。

您有解决问题的方法吗?我想我也有同样的问题。设置BackgroundView
tableView后。BackgroundView
我有一个浅灰色的背景视图,没有任何模糊效果。@Stone嗨,我也遇到了同样的问题。你有什么想法吗?@wongzigi不幸没有。仍然没有解决办法。@Stone我终于找到了答案<代码>vc.modalPresentationStyle=UIModalPresentationOverFullScreen试试这个代码。@Wongzigi哇,太棒了,谢谢。有类似的问题。这一修正成功了!!下面是我如何以编程方式(Obj-C和Swift)
viewtobresented.modalPresentationStyle=UIModalPresentationCurrentContext;viewToBePresented.modalTransitionStyle=UIModalTransitionStyleCoverVertical
viewToBePresented.modalTransitionStyle=UIModalTransitionStyle.Cover垂直视图ToBePresented.ModalPresentStyle=UIModalPresentStyle.OverFullScreen
@如果您输入错误:您想要的ModalPresentStyle是UIModalPresentationOverCurrentContext(Obj-C)和OverCurrentContext(Swift)