6

我正在创建一个 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;
}

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

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

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

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

4

2 回答 2

6

你在使用故事板吗?

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

Xcode 截图

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

于 2014-10-06T19:39:11.257 回答
3

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

要实现所需的行为,您需要将 segue 演示样式更改为保留底层视图控制器的内容,例如 Over Full Screen 而不是默认的 Full Screen。

请注意,当您关闭此模式演示时,viewDidAppear不会在演示视图控制器上调用,因为它现在始终可见。如果您在解雇时依靠该方法执行任何功能,那可能会咬您一口。

于 2014-10-04T03:05:42.680 回答