Edgesforextendedlayout Uitableviewdelegate
Das Problem ist, dass meine Ansicht, die eine UIView und eine UITableView in einer ScrollView enthält. Wird unter der UINavigationBar versteckt, wenn sie lichtdurchlässig ist. Ich habe mehrere Threads wie diese berücksichtigt. Aber sie alle vorschlagen, um: In Swift 2, war dieser Code: Ich habe auf Xcode 8.1 und Swift 3.0.1 aktualisiert heute, aber ich kann nicht finden, etwas in der Release-Hinweise zu dieser Frage. Der Compiler sagt mir, dass. None wurde in. none geändert. Aber nach dem Bearbeiten, dass. none nicht vorhanden ist. Das Ändern von. top hatte keine Auswirkung. Die tableView wird programmgesteuert eingerichtet und Putting Insets nicht helfen, weil ich ein scrollView mit einem UIView oben auf der UITableView, die unter der UINavigationBar versteckt ist. Was bin ich vermisst Hilfe wird sehr geschätzt. Der erste Bildschirm meiner Anwendung ist ein UITableViewController ohne Navigationsleiste, was bedeutet, dass der Inhalt fließt unter der Statusleiste so theres eine Menge von Text-Kollisionen. Ive justiert die Eigenschaften für unter Spitzenstäbe und Anpassung scroll Ansichteinsätze, die es wirklich stoppen, vom Scrollen unter, aber auf Kosten des Haltens der Oberseite der Tabellenansicht unter. Ive versucht, die UITableView Rahmen um 20 Pixel zu versetzen, aber es scheint nicht zu wirken und wie ich derzeit die App kompatibel mit iOS 6 Ich kann nicht zu iOS 7 Storyboards zu erzwingen autolayout, um die obere Höhenführung zu verwenden. Hat jemand eine Lösung gefunden, die für beide Versionen funktioniert Was ich versucht habe: set KantenForExtendedLayout. Ändern der Einstellungen in Storyboard für Unter oberen Balken und Anpassen der Bildlaufansicht. Wodurch der Rahmen in einen neuen Bereich gezwängt wird. Diese Frage ist sehr einfach zu replizieren: Erstellen Sie ein neues Projekt und löschen Sie die Standard-ViewController und ersetzen Sie es mit einem TableViewController, die Sie in das Storyboard aus der Objektbibliothek ziehen. Wenn Sie diese Schritte ausführen, werden Sie sehen, dass nichts, einschließlich Tweaking Xcodes-Kontrollkästchen, um Ränder unter Bars zu verlängern, sowie die Platzierung der UITableView unterhalb der Statusleiste. Dieses Problem kann sehr frustrierend sein, und ich glaube, es ist ein Bug auf Äpfel Ende, vor allem, weil es zeigt sich in ihrem eigenen vorverdrahteten TableViewController aus der Objektbibliothek. Ich bin nicht einverstanden mit jedem, der versucht, dies zu lösen, indem Sie jede Form von Magic Numbers, z. B. Verwenden Sie ein Delta von 20px. Diese Art von eng gekoppelten Programmierung ist definitiv nicht das, was Apple will, dass wir hier tun. Ich habe zwei Lösungen für dieses Problem entdeckt: Erhalten der TableViewController s-Szene. Wenn Sie den TableViewController im Storyboard beibehalten möchten, ohne ihn manuell in eine andere Ansicht zu platzieren, können Sie den TableViewController in einen Navigationscontroller einbetten (Editor Einbinden im Navigationscontroller) und deaktivieren Sie die Navigationsleiste. Dies löst das Problem ohne zusätzliche Optimierung benötigt, und es auch bewahrt Sie TableViewControllers Szene im Storyboard Mit AutoLayout und Einbettung der TableView in eine andere Ansicht (ich glaube, dies ist, wie Apple will, dass wir dies tun). Erstellen Sie einen leeren ViewController und ziehen Sie Ihre UITableView darin. Ziehen Sie dann aus der Tabelle in die Statusleiste. Während die Maus an der Unterseite der Statusleiste ankommt, sehen Sie eine Autolayout-Blase, die Top Layout Guide sagt. Lassen Sie die Maus los und wählen Sie Vertical Spacing. Das wird sagen, das Layout-System, um es direkt unter der Statusleiste. Ich habe beide Möglichkeiten auf eine leere Anwendung getestet und beide funktionieren. Möglicherweise müssen Sie einige zusätzliche tweaking tun, damit sie für Ihr Projekt arbeiten. RyanR Ich bemerkte das auch, aber ich denke es ist irgendwann OK. Apple hat das gleiche in mobilen Safari39s geöffnet Tabs Ansicht, werden Tabs unterhalb der Statusleiste angezeigt. Die Navigations-Controller-Lösung ist der einfachste Workaround, ich root dafür. Allerdings ist die durchscheinende Statusleiste eine dumme Idee. Ndash Pride Chung 26.05.2008 um 17:01 Option 2 funktioniert nicht mehr in Xcode 5. Die beschriebene Aktion (ctrl-drag) hätte nie funktionieren sollen, da es sich um das Outlets-System handelt, aber selbst wenn man manuell an die Szene zieht Ich glaube, dies ist ein weiterer großer Fehler in AutoLayout :( :() ndash Adam Dec 10 13 at 11:05 Merken Sie sich: Das arbeitete für mich für die Folgende Konfiguration: Keine Navigationsleiste am oberen Rand des Bildschirms (Tabellenansicht trifft auf Statusleiste) Tabellenansicht ist nicht scrollbar Wenn die obigen zwei Anforderungen, die Ihre Milage erfüllt sind, unterschiedlich sein kann Ich habe meine Ansicht programmgesteuert erstellt, und das wurde für mich beendet: TLDR die Top-Antworten 2nd-Lösung funktioniert fast, aber, aber es ist nicht so, wie es funktioniert Für einige Versionen von xCode ctrldragging zu Top Layout Guide und Auswählen Vertical Spacing nichts. Wenn Sie jedoch zuerst die Größe der Tabellenansicht anpassen und dann Top Space zu Top Layout Guide-Arbeiten auswählen, ziehen Sie ein UITableView-Objekt in die Ansicht. (Nicht UITableViewController). Positionieren Sie es in der Mitte mit den blauen Layout-Führungen. Ziehen Sie ein UITableViewCell in die TableView. Dies wird Ihre Prototyp-Wiederverwendungszelle sein, also vergessen Sie nicht, ihre Wiederverwendungs-ID auf der Registerkarte Attribute zu setzen, oder Sie erhalten einen Absturz. Erstellen Sie Ihre benutzerdefinierte Unterklasse von UIViewController und fügen Sie die Protokolle ltUITableViewDataSource, UITableViewDelegategt hinzu. Vergessen Sie nicht, Ihre Storyboards ViewController auf diese Klasse im Identity Inspector zu setzen. Erstellen Sie eine Auslass für Ihre TableView in Ihrer Implementierungsdatei und nennen Sie es tableView Klicken Sie mit der rechten Maustaste auf die Tabellenansicht, und ziehen Sie die dataSource und den Delegaten zu Ihrem ViewController. Jetzt für den Teil der nicht Clipping in die Statusleiste. Fassen Sie die obere Kante Ihrer Tabellenansicht an und verschieben Sie sie nach unten zu einem der gestrichelten blauen Auto-Layout-Hilfslinien, die sich in der Nähe der Oberseite befinden. Jetzt können Sie das Ziehen aus der Tabellenansicht nach oben steuern und Top Space auswählen Geben Sie einen Fehler über zweideutige Layout von TableView, fügen Sie nur fehlende Constraints und Ihre getan. Nun können Sie Ihre Tabelle Ansicht wie normal, und es wont Clip die Statusleiste Ich weiß nicht, wie Kosher es ist, aber ich fand, dass dieses Schema bewegt sich die ViewControllers Ansicht nach unten und bietet die Statusleiste mit einem soliden Hintergrund: Ersetzen Sie redColor mit welcher Farbe Sie für den Hintergrund wünschen. Sie müssen separat einen der Swizzles ausführen, um die Farbe der Zeichensymbole in der Statusleiste festzulegen. Ich benutze View Controller-basierte Statusleiste Aussehen NO und Statusleiste Stil Opaque schwarz Stil in der plist, dies zu tun global. Scheint zu funktionieren, und ich bin interessiert, von Bugs oder Probleme mit ihm zu hören. Beantwortet Jan 22 14 am 22:08 diese didn39t Arbeit für mich ndash Die folgende Lösung funktioniert gut genug in Code ohne Zauber Konstanten und Konten für den Benutzer die Änderung der Größe Klasse, z. Durch Rotationen oder Side-by-Side-Anwendungen auf ipads: Abrahamchezs Lösung developer. applelibraryiosqaqa1797index. html arbeitete für mich wie folgt. Ich hatte einen einzelnen UITableviewcontroller als meine ursprüngliche Ansicht. Ich hatte versucht, den Offset-Code und Einbettung in ein navcon aber weder löste die Statusbar Transparenz. Fügen Sie einen Viewcontroller hinzu, und machen Sie es die erste Ansicht. Dies sollte Ihnen zeigen, kritische Top amp Bottom Layout Guides. Ziehen Sie die alte Tabellenansicht in die Ansicht im neuen Controller. Machen Sie alle Sachen, um die Tabelle in den neuen Controller nachzurüsten: Ändern Sie die alte view controller. h-Datei an inheritsubclass von UIViewController anstelle von UITableViewController. Fügen Sie UITableViewDataSource und UITableViewDelegate den Viewcontrollern. h hinzu. Verbinden Sie alles, was im Storyboard benötigt wird, wie eine Suchleiste. Die große Sache ist, die Beschränkungen einzurichten, wie im Apple QampA. Ich didnt stören Einfügen einer Symbolleiste. Nicht sicher, die genaue Reihenfolge. Aber ein rotes Symbol erschien auf dem Layout Guides, vielleicht, wenn ich gebaut. Ich klickte es und ließ Xcode installclean die Einschränkungen. Dann klickte ich überall, bis ich die Vertical Space-Einschränkung gefunden und veränderte seinen Spitzenwert von -20 bis 0 und es funktionierte perfekt. Wenn Sie auch brauchen, um iOS 6 zu unterstützen, youll müssen Sie es bedingt verschieben. Das heißt, in iOS 7 sollten Sie nur verschieben sie 20 Punkte (entweder durch Frame-Manipulation oder mit Auto-Layout), und in iOS 6 Sie es allein lassen. Ich glaube nicht, dass Sie dies in IB tun können, also müssen Sie es im Code tun. Sie können dies in IB tun, indem Sie die iOS6iOS7 Deltas. Stellen Sie Ihre Position in iOS 7, dann für iOS 6 setzen Sie das Delta Y auf -20 Punkte. Siehe diese SO Frage für weitere Informationen. Beantwortet Sep 19 13 am 19:01 Einstellen des Rahmens unten doesn39t es leider ändern. Ndash Nicholas Smith Sep 19 13 am 19:07 Was doesn39t Arbeit über es Die Tabellenansicht doesn39t nach unten ndash Scott Berrevoets Ja, es bleibt in der gleichen Position. I39ve versucht self. view. frame und self. tableView. frame. In viewWillAppear und viewDidLoad. Um sicher zu sein, setze ich setContentNeedsDisplay auch ein, um einen Neuaufbau zu erzwingen. Ndash Nicholas Smith Sep 19 13 am 19:13
Comments
Post a Comment