2014-09-24 15 views
6

Ich erstelle einen UITableViewController (im Stammverzeichnis eines UINavigationController) und präsentiere das modal auf einem anderen View-Controller. Ich habe es in einem Ausmaß arbeiten, dass, wenn die Ansicht lädt und ViewDidAppear aufgerufen wird, der visuelle Effekt gut aussieht. Aber direkt nach viewDidAppear verschwindet der visuelle Effekt und die Tabellenansicht hat einen weißen Hintergrund.UIVisualEffectView auf UITableView-Hintergrund

In meinem präsentierte UITableViewController, habe ich dies in 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; 
} 

ich dies auch umzusetzen, um sicherzustellen, dass die Zellen einen klaren Hintergrund haben:

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

ich auch die cell.backgroundColor = [UIColor clearColor] gesetzt in TableViews cellForRowAtIndexPath: aber das hilft auch nicht.

Wieder bekomme ich den richtigen Effekt, wenn die Ansicht geladen wird, aber es verliert den Hintergrund verwischen, sobald es auf dem Bildschirm erscheint. Irgendwelche Ideen, was könnte schief gehen? Ich habe auch versucht, die blueEffectView als eine Eigenschaft in meinem View-Controller zu behalten, aber kein Glück

+0

Haben Sie eine Lösung für das Problem? Ich denke, ich habe das gleiche Problem. Nach dem Setzen der BackgroundView 'tableView.backgroundView' habe ich eine hellgraue BackgroundView ** ohne ** Blur-Effekt. – Stone

+0

@Stone Hallo, ich habe das gleiche Problem. Hast du eine Idee? –

+0

@Wongzigii leider nicht. immer noch keine Lösung. – Stone

Antwort

3

Das Problem ist, wenn Sie einen View-Controller modal mit den Standardeinstellungen präsentieren, sobald es die Übernahme des Bildschirms abgeschlossen hat, das zugrunde liegende View Controller scheint im Wesentlichen gelöscht zu sein. Aus diesem Grund sieht Ihr Blur-Effekt bis zum Abschluss der Präsentationsanimation gut aus - die zugrunde liegende Ansicht verschwindet.

Um das gewünschte Verhalten zu implementieren, müssen Sie den Stil für die Darstellung der Segmente in etwas ändern, das den zugrunde liegenden Ansichtscontroller wie Over Full Screen anstelle des Standardvollbilds erhält.

Beachten Sie, dass viewDidAppear nicht auf dem präsentierenden Ansichtscontroller aufgerufen wird, wenn Sie diese modale Präsentation ablehnen, da es jetzt immer sichtbar ist. Das kann dich beißen, wenn du dich auf diese Methode verlässt, um irgendeine Funktion bei der Entlassung auszuführen.

+0

Hatte ein ähnliches Problem. Und diese Lösung hat es geschafft !! Hier ist, wie ich es programmgesteuert gemacht habe (Obj-C und Swift) 'viewToBePresented.modalPresentationStyle = UIModalPresentationCurrentContext; viewToBePresented.modalTransitionStyle = UIModalTransitionStyleCoverVertical; ' ' viewToBePresented.modalTransitionStyle = UIModalTransitionStyle.CoverVertical viewToBePresented.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen' – Priest

+0

@Priest Sie haben einen Tippfehler: die modalPresentationStyle Sie wollen, ist UIModalPresentationOverCurrentContext (Obj-C) und OverCurrentContext (Swift) –

6

Verwenden Sie Storyboards?

Wählen Sie den Ansichtscontroller aus, der modal verwendet wird (oder wenn er in eine andere VC eingebunden ist, wählen Sie den Wrapper aus) und legen Sie das Kombinationsfeld Präsentation auf "Vollbildmodus" oder "Aktuellen Kontext" fest. (Ich weiß nicht wirklich, was der Unterschied ist, und beide scheinen das gleiche zu tun.)

Screenshot of Xcode

Danach tun, Ihre Unschärfe-Effekt sollte nur Work ™. Außerdem denke ich, das ist neu in iOS 8, ich habe das noch nicht in iOS 7 getestet.

Verwandte Themen