2014-09-24 49 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中測試過。