2016-07-08 17 views
7

Derzeit besteht meine Ansichtshierarchie aus einem UIViewController (NOT UITableViewController), einem UITableView, das im View-Controller verschachtelt ist, und einem UIVisualEffectView (vor ExtraLight) vor dem UITableView das Ende einer UINavigationBar. Der Effekt, den ich erzielen möchte, ähnelt dem der segmentierten Ansicht im App Store.Eine unterscheidbare Unschärfe zwischen UINavigationBar und UIVisualEffectView beseitigen

Allerdings habe ich eine seltsame Unschärfe Kante an der Grenze zwischen der Navigationsleiste auftritt und die UIVisualEffectView, dass die Ansicht aussieht inkonsistent macht, wie im Bild unten (durch den roten Kreis markiert):

enter image description here

Im Idealfall würde ich bevorzugen, dass die UIVisualEffectView perfekt mit der Unschärfe der UINavigationBar mischt.

Danke.

+0

Warum hast du nicht einfach einen einfarbigen Hintergrund, so sieht dein Screenshot aus, du scheinst nichts im Hintergrund zu haben? – Wain

+0

Wenn ich der Navigationsleiste und der Effektansicht eine Hintergrundansicht hinzufüge, wird der Punkt, an dem die Unschärfeeffektansicht angezeigt wird, aufgehoben. In iOS 7 und höher ist die Tabellenansicht tatsächlich durch die transparente Navigationsleiste sichtbar. –

+2

Ich musste das gleiche Problem in einer App lösen, die ich gerade entwickle. Für mich war es die TabBar und eine Unsichtbarkeitsanzeige, die an den Kopfzeilen der Kopfzeile und des Tabellenbereichs angehängt war und am unteren Rand der Navigationsleiste angeheftet war. Die Lösung bestand darin, die UITabBar transparent zu machen (NICHT durchscheinend -> KEIN Hintergrund) und die blurView nach unten zu erweitern, um den von der tabBar belegten Platz zu füllen. Bitte lassen Sie mich wissen, wenn Sie Code-Beispiele benötigen, um den Balken transparent zu machen. :) - Ich fürchte, es gibt kein Flag, das Sie auf einem UIBar setzen können, um es mit UIVisualEffectViews an den Rändern "verschmelzen" zu lassen. Aber ich würde gerne gefälscht werden. – Cabus

Antwort

1

Wenn Sie auf Ihr Bild schauen, scheint es, dass Ihr Problem nicht auf UINavigationBar zurückzuführen ist, sondern auf eine Ansicht, in der Sie UISegmentedControl hinzugefügt haben. ich nicht Ihre Struktur wissen, aber es könnte die tableHeaderView (self.tableView.tableHeaderView) so eine vernünftige Art und Weise, dieses Problem zu lösen, ist die Kopffarbe zu ändern:

Codebeispiel:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
     var headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView 
     header.contentView.backgroundColor = UIColor.clearColor() 
     return header 
} 
+0

verwendete ich eine Ansichtshierarchie wie folgt aus: 'UINavigationController> UIViewController (nicht Tabelle View-Controller)> UITableView' Obenansicht der Tabelle (weil ich einen Standard' UIViewController' als Basis verwendet wird), I a hinzugefügt ' UIVisualEffectView' wurde auf Extra Light gesetzt und verschachtelte ein 'UISegmentedControl' darin. –

+0

Ich habe es versucht, ich kann Ihr Problem nicht reproduzieren, haben Sie einen GitHub o Gist oder ein Beispiel? –

1

Versuchen Sie, Verwenden Sie einen UIToolBar anstelle von UIVisualEffectView als Hintergrund des Segments. Die Navigationsleiste hat einen transluzenten Hintergrund und keinen Unschärfeeffekt. UIToolBar hat den gleichen transluzenten Hintergrund wie die Navigationsleiste, so dass es am Rand nahtlos aussieht.

+0

Ich habe versucht, eine UIToolBar zu verwenden, als ich diesen Bildschirm anfänglich gemacht habe, aber leider konnte ich die gewünschte Länge des 'UISegmentedControl' nicht an die' UIToolBar' anpassen (ich möchte, dass das segmentierte Steuerelement in die Toolbar mit ca. 16pts passt) links am rechten und linken Rand). Deshalb habe ich mich am Ende mit einem UIVisualEffectView abgefunden. –

+0

'UIVisualEffectView' wird niemals Ihre Bedürfnisse befriedigen, da es nicht das gleiche Aussehen wie eine transparente Navigationsleiste hat. Sie sollten wahrscheinlich darüber nachdenken, die Größe des UISegmentierten Steuerelements in einer Symbolleiste zu skalieren. Eine Möglichkeit wäre, an jeder Seite einen flexiblen Abstandhalter zu verwenden, um das Steuerelement zu zentrieren, und dann die richtige Größe für den Code festzulegen. – Fujia