Der erste Bildschirm meiner Anwendung ist ein UITableViewController ohne Navigationsleiste, was bedeutet, dass der Inhalt unter der Statusleiste fließt, so dass es viele Textkollisionen gibt. 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 versetzt, 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 Kanten zu verlängern unter Bars, sowie die Verwendung wird die UITableView unterhalb der Statusleiste platzieren. 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 Achtung: Das funktionierte 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 Delegate 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 anfä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. Hier ist ein Swift 2.3. (Xcode 8.0) - Lösung. Ich habe eine Unterklasse von UITableView erstellt. Der Inhalt Inset sollte immer Null (standardmäßig) sein. Ich setze es Null manuell. Sie können auch eine Check-Methode, die die Prüfung macht und wenn es etwas anderes als das, was Sie wollen, dass es nur die richtige richtige werden. Die Änderung wird nur reflektieren, wenn die Tabellenansicht gezeichnet wird (was nicht oft passiert). Vergessen Sie nicht, die Tabellenansicht in Ihrem IB zu aktualisieren (im TableViewController oder nur TableView in Ihrem ViewController). Antwortete am 6. Oktober um 10:09 Uhr Gestellt Rahmen für Ihre Tischansicht. Und legte es 44p von oben. In iOS 7 Alles begann oben links. Auch Statusleiste ist ein Teil des Fensters. Beantwortet Sep 22 13 am 22:32 Sehen Sie alle Lösungen: Mein Projekt ist nur mit xib, so dass die Lösung mit Storyboard nicht für mich gearbeitet. Self. edgesForExtendedLayout UIRectEdgeNone funktioniert nur, wenn die Navigationsleiste sichtbar ist. Aber wenn Ihre Ansicht ist nur Statusleiste, wird das nicht funktionieren. So kombiniere ich zwei conditons. Hilfe funktioniert. Antwortete Jul 4 15 am 3:16 Wenn Sie auch brauchen, um iOS 6 zu unterstützen, youll haben, um es bedingt zu 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: 13ECSlidingViewController ist ein Ansichtsteuerpultbehälter, der eine überlagerte Schnittstelle verwaltet. Die obere Schicht verankert die linke oder rechte Seite des Behälters und zeigt die darunter liegende Schicht. Dies ist am häufigsten bekannt als Side Menu, Slide Out, Hamburger MenuDrawerSidebar, etc. Unterstützt alle Bildschirmgrößen und Ausrichtungen. Die Philosophie hinter ECSlidingViewController ist es, einfache Standardwerte bereitzustellen, während sie anpassbar sind. Es kann nicht funktionieren oder schauen, wie Sie wollen, aus der Box, aber es doesnt in die Art und Weise, wenn sie anpassen. Gut benommene Ansicht Steuerpultbehälter Ihre Ansichtsteuerpulte empfangen die korrekte Ansicht Lebenszyklus - und Umdrehungsmethoden zur rechten Zeit. Ihre Layouts werden bei Rotation oder gebundenen Änderungen unter Berücksichtigung ihrer edgegesForExtendedLayout-Eigenschaft entsprechend aktualisiert. Das bedeutet, dass Sie die Kontrolle darüber haben, wie sich Ihre View-Controller unter oder unter der Statusleiste, der Navigationsleiste oder einem anderen Container positionieren, der einen topLayoutGuide setzt. ECSlidingViewController versucht sein Bestes, um zu fühlen, wie es ein Teil der UIKit Ansichtsteuerungscontainerfamilie ist, und es funktioniert, wenn es jede Kombination von ihnen zusammen verschachtelt. Die Grundkonfiguration kann mit benutzerdefinierten Runtime-Attributen erfolgen. ECSlidingViewController kommt mit einem benutzerdefinierten segue und unterstützt Abroll-Segues für den Übergang zwischen View-Controller. Diese Funktion ist optional und alles kann programmgesteuert durchgeführt werden, wenn Sie wollten. Genau wie jede andere View-Controller-Container, werden Sie wahrscheinlich verwenden Storyboards mit einigen programmatischen Anpassungen. Wenn die Standard-Sliding-Animation oder Swiping-Interaktion, um die Draufsicht nicht an Ihre Bedürfnisse anzupassen, dann können Sie sie anpassen, indem Sie Ihre eigenen. Benutzerdefinierte Übergänge verwenden die neuen Protokolle, die in iOS 7 eingeführt werden, während eine API ähnlich der API verfügbar gemacht wird, die die UIKit-Container für benutzerdefinierte Übergänge offen legen. Sie sollten sich wie zu Hause fühlen, wenn Sie mit der benutzerdefinierten Übergangs-API in iOS 7 vertraut sind. Hinweis. Für die Unterstützung von iOS 5-7 steht Ihnen ECSlidingViewController Version 1.x zur Verfügung. Installieren Sie mit CocoaPods, indem Sie die folgenden in Ihre Podfile:
No comments:
Post a Comment