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 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. Um die Farbe der Zeichen / Symbole in der Statusleiste einzustellen, müssen Sie separat einen der Swizzles auswählen. 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. apple/library/ios/qa/qa1797/index. 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 Ihre alte Ansicht controller. h-Datei zu erben / Unterklasse 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 lassen Xcode installieren / bereinigen 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 iOS6 / iOS7 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 um 19: 13iOS 6 038 7 Kompatibilitäts-Tipps In nur wenigen Monaten hat iOS 7 seinen Weg zu über 80 aller iOS-Geräte gefunden. Xamarin kündigte am selben Tag Unterstützung, wenn iOS 7 gestartet und es ist einfach, Ihre App zu aktualisieren, wenn die Entwicklung mit Xamarin. iOS. Apple empfiehlt zuerst, Ihre App für iOS 7 neu zu gestalten, und dann, wenn Sie strukturelle oder navigatorische Änderungen haben, um sie auf die iOS 6-Version zu bringen, wo sie geeignet sind. Apple empfiehlt nicht, Ihre iOS 6-Version Ihrer App mit iOS 7-Designelementen wie z. B. randlosen Balken-Schaltflächen neu zu gestalten. Hier sind ein paar schnelle Benutzeroberfläche Tipps, die Ihnen helfen, mit Ihrem Übergang und Kompatibilität. Versionsnummern: Die Bestimmung der Version von iOS ist wichtig, wenn Sie auf neue APIs zugreifen. Wenn Sie versuchen, eine iOS 7-API auf einem Gerät mit einer älteren Version aufzurufen, kann dies dazu führen, dass Ihre Anwendung abstürzt, wenn sie nicht ordnungsgemäß behandelt wird. Daher ist es wichtig, immer mit der einfachen Hilfsmethode nach der korrekten Versionsnummer zu suchen: UIDevice. AktuelleDevice. CheckSystemVersion (7. 0) Um es einfacher zu machen, können Sie dies zu einer statischen Methode in einer Utility-Klasse machen. Ich rief meine Util. cs und fügte die folgende Methode hinzu, um zu überprüfen, ob das aktuelle Gerät iOS 7 oder neuer ist. Anzeigen von Controller-Änderungen: Ansichten in iOS 7 verwenden Vollbild-Layouts, wenn Sie derzeit WantsFullScreenLayout true angeben. Kann der Ansichts-Controller seinen Inhalt an einem unerwarteten Bildschirmort anzeigen, wenn er auf iOS 7 ausgeführt wird. Sie können jedoch festlegen, wie ein View-Controller seine Ansichten ausgibt. Alle UIViewController8217s bieten diese Eigenschaften: EdgesForExtendedLayout: Wenn Sie benutzerdefinierte UIViewControllers erstellt haben, wird dies Ihr neuer bester Freund sein. Seit iOS 7 gehen UIViewControls nun unter die Navigationsleiste. Es ist üblich, dass sich Ihre Benutzeroberfläche darunter versteckt. Das Festlegen dieser Eigenschaft auf UIRectEdge. None zwingt iOS 7, Ihren Inhalt nicht unter die Navigationsleiste zu stellen. ExtendedLayoutIncludesOpaqueBars: Wenn Sie opake Balken verwenden, sollten Sie nicht nur EdgesForExtendedLayout setzen, sondern auch ExtendedLayoutIncludesOpaqueBars auf true setzen, da der Standardwert false ist. AutomaticallyAdjustsScrollViewInsets: ScrollViews passen nun automatisch ihre Einfügungen in iOS 7 an. Wenn Sie dies nicht wünschen, möchten Sie diese Eigenschaft auf false setzen. Für all dies sollten Sie sicherstellen, dass Sie die Eigenschaften in einer Versionskontrolle verpacken: Controls: Es gibt mehrere Änderungen am Look and Feel von Controls in iOS 7. Hier sind ein paar kurze Tipps: UIButtons: In iOS 7 ein UIButton Nicht mehr enthalten eine Lünette oder Hintergrund Aussehen. UIButtonType. RoundedRect ist nun definiert als UIButtonType. System. Allerdings, wenn Sie noch Ziel früheren Versionen weiterhin mit RoundRect und iOS 7 weiterhin die System-Schaltfläche Aussehen. Wenn Ihre Benutzeroberfläche einen Hintergrund erfordert, können Sie sie auf eine von zwei Weisen heranziehen. 1.) Geben Sie eine Hintergrundfarbe an: button. Background UIColor. DarkGray 2.) Verwenden Sie eine Schaltfläche vom Typ UIButtonType. Custom und liefern Sie ein benutzerdefiniertes Hintergrundbild. UIBarButtons: In iOS 7 wird die benutzerdefinierte Balken-Schaltfläche nicht mehr als Template-Bild behandelt, das als Maske zum Erstellen des endgültigen Bildes verwendet wird. Dies bedeutet, dass der Farbton der Fenster - oder Navigationsleiste angewendet wird. Um festzulegen, ob benutzerdefinierte Grafiken als Vorlagenbild behandelt oder vollständig gerendert werden sollen, verwenden Sie die folgenden Eigenschaften: Lesen Sie weiter Live-Webinar Erste Schritte mit iOS 10 und Android N Erste Schritte mit dem iOS 10-Benachrichtigungsrahmen Sagen Sie Hallo zu Siri mit SiriKitView ist Angezeigt unter Statusleiste in iOS 7 und EdgesForExtendedLayout hilft Im nicht ein Problem, dass meine Ansicht diplayed unter der Statusleiste. Nach der Suche fand ich, dass ich diese. EdgesForExtendedLayout UIRectEdge. None zu der ViewDidLoad () des ViewController hinzugefügt haben, aber es funktioniert nicht für mich. Als Referenz habe ich das helloiPad-Beispiel aus xamarin (docs. xamarin / samples / HelloiPad) hinzugefügt Ein Label, das es am oberen Rand des Bildschirms in IB positioniert. In iOS6 ist es richtig angezeigt. Nun fügte ich die Zeile this. EdgesForExtendedLayout UIRectEdge. None und führen Sie es in der iOS7-Simulator, wird das Etikett in der Statusleiste angezeigt. Was mache ich falsch
No comments:
Post a Comment