2014-09-24 22 views
6

Bir UITableViewController'ı (bir UINavigationController'ın kökeninde) oluşturuyorum ve bunu bir başka görünüm denetleyicisinin en üstünde sunmaktayım. Görünüm yükler ve viewDidAppear çağrıldığında görsel efektin iyi göründüğü bir ölçüde çalışıyorum. Ancak viewDidAppear'dan hemen sonra görsel efekt kayboluyor ve tablo görünümü beyaz bir arka plana sahip. Benim sunulan UITableViewController içindeUITableView arka planında UIVisualEffectView

, viewDidLoad içinde ekledi:

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

Ben de cell.backgroundColor = [UIColor clearColor] ayarlanan:

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; 
} 

Ben de hücreler açık bir altyapıya sahip emin olmak için, bu uygulamaya tableView cellForRowAtIndexPath: ama bu da işe yaramıyor.

Yine de, görünüm yüklendiğinde doğru etkiyi elde ederim, ancak ekranda belirdiği anda bulanıklık arka planını kaybeder. Herhangi bir fikir yanlış ne olabilir? Görünüm denetleyicimde blueEffectView özelliğini bir özellik olarak tutmaya çalıştım ama şans yok

+0

Problem için bir çözüm var mı? Sanırım aynı problemim var. BackgroundView 'tableView.backgroundView' ayarlandıktan sonra, herhangi bir bulanıklık efekti olmadan açık gri BackgroundView ** var. – Stone

+0

@Stone merhaba, aynı sorunu yaşıyorum. Hiç bir fikrin var mı? –

+0

@Wongzigii maalesef hayır. hala çözüm yok. – Stone

cevap

3

Sorun, varsayılan ayarları içeren bir görünüm denetleyicisini genel olarak ekrana geçmeyi bitirdikten sonra Görünüm denetleyicisi temel olarak silinmiş gibi görünüyor. Bu nedenle, görsel efektiniz sunum animasyonu tamamlanıncaya kadar mükemmel görünür - alttaki görünüm kaybolur.

İstenen davranışı uygulamak için, segue sunum stilini, varsayılan Tam Ekran yerine Tam Ekranda olduğu gibi alttaki görünüm denetleyicisini koruyacak bir şeye değiştirmeniz gerekir.

Bu modal sunumu reddettiğinizde, şimdi görüntüleme görünür denetleyicisinde viewDidAppear çağrılmayacağını, çünkü şimdi her zaman görünür olduğunu unutmayın. İşten çıkarma sırasında herhangi bir işlevi yerine getirmek için bu yönteme güveniyorsanız, bu sizi ısırtabilir.

+0

Benzer bir sorun vardı. Ve bu düzeltme hile yaptı! Program aracılığıyla bunu nasıl yaptım (Obj-C ve Swift) 'viewToBePresented.modalPresentationStyle = UIModalPresentationCurrentContext; viewToBePresented.modalTransitionStyle = UIModalTransitionStyleCoverVertical; ' ' viewToBePresented.modalTransitionStyle = UIModalTransitionStyle.CoverVertical viewToBePresented.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen' – Priest

+0

@Priest bir yazım hatası var: İstediğiniz modalPresentationStyle UIModalPresentationOverCurrentContext olan (Obj C) ve OverCurrentContext (Swift) –

6

Storyboards kullanıyor musunuz?

Moda olarak kullanılan görünüm denetleyicisini seçin (veya başka bir VC'ye sarılmışsa, sarıcıyı seçin) ve Sunum açılan kutusunu "Tam Ekran Aşırı" veya "Aşırı Akım Bağlamında" olarak ayarlayın. (Aslında ikisi de aynı şeyi yapmak gibi görünüyor, farkın ne olduğunu bilmiyorum.)

Screenshot of Xcode

o yaptıktan sonra, bulanıklık efekti Hemen Çalışma ™ gerektiği. Ayrıca, bunun iOS 8'de yeni olduğunu düşünüyorum, bunu henüz iOS 7'de test etmedim.