2014-09-24 47 views
6

我正在创建一个UITableViewController(位于UINavigationController的根目录)并在另一个视图控制器上以模态方式呈现此模型。我有一定程度的工作,这样当视图加载和viewDidAppear被调用时,视觉效果看起来不错。但是在viewDidAppear之后,视觉效果消失了,tableview有一个白色的背景。UIVisualEffectView on UITableView background

在我提出的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作为一个属性,但没有运气

+0

你有解决问题的办法吗?我想我有同样的问题。在设置BackgroundView'tableView.backgroundView'后,我有一个浅灰色的BackgroundView **,没有任何模糊效果。 – Stone 2014-09-30 14:21:27

+0

@石嗨,我得到了同样的问题。你有什么想法吗? – 2015-01-26 07:02:19

+0

@Wongzigii不幸没有。仍然无解。 – Stone 2015-02-03 18:29:56

回答

3

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

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

请注意,当您关闭此模态演示文稿时,将不会在呈现视图控制器上调用viewDidAppear,因为它现在始终可见。如果你依靠这种方法在解雇时执行任何功能,这可能会让你感到痛苦。

+0

有类似的问题。这个修复就是这么做的! 这里是我是如何做到的编程(对象 - 和SWIFT) 'viewToBePresented.modalPresentationStyle = UIModalPresentationCurrentContext; viewToBePresented.modalTransitionStyle = UIModalTransitionStyleCoverVertical;' 'viewToBePresented。modalTransitionStyle = UIModalTransitionStyle.CoverVertical viewToBePresented.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen' – Priest 2014-10-29 19:36:19

+0

@Priest你有一个错字:你想要的modalPresentationStyle是UIModalPresentationOverCurrentContext(的OBJ-C)和OverCurrentContext(SWIFT) – 2015-02-17 22:40:22

6

你在使用故事板吗?

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

Screenshot of Xcode

这样做之后,你的模糊效果应该只是工作™。另外,我认为这是iOS 8的新功能,我还没有在iOS 7中测试过。