Ich mache eine grundlegende Minesweeper-App zum Üben / Spaß in swift. Ich möchte es so machen, dass die Größe des Boards (10 Kacheln breit) sich an jeden iOS-Bildschirm anpasst.
Um dies zu tun, setze ich die Größe jeder Kachel, indem ich meine tileContainer view.frame.width und / 10.
Mein Problem ist, dass die Ansicht "tileContainer" auf 600 gesetzt ist, egal was passiert. Auf meinem Storyboard setze ich den tileContainer gleich der Breite des View Containers, indem ich CTR click & amp; Ziehen Sie zur Ansicht und wählen Sie die gleiche Breite. Dadurch bleibt die Breite von tileContainer auf 600 eingestellt, unabhängig von dem Gerät, auf dem ich teste. (was mein Problem ist, sollte die Breite je nach Bildschirmbreite nicht konstant 600 ändern)
Weiß jemand, wie ich die richtige Breite des Bildschirms unabhängig von dem Gerät erhalten kann, auf dem es verwendet wird?
Wenn Sie das automatische Layout verwenden, werden die Teilansichten nach der Funktion viewDidLayoutSubviews
angeordnet. Wenn Sie tileContainer.frame.size
vor diesem Aufruf aufrufen, z. B. in viewDidLoad
, ist dies immer 600 zu 600 (das ist die Standardgröße im Storyboard).
%Vor%viewDidLayoutSubviews : Wird aufgerufen, um den View-Controller zu benachrichtigen, dass seine Ansicht gerade seine Unteransichten angelegt hat. Referenz
Während die angenommenen Antworten eine richtige Antwort sind, dachte ich, ich könnte zumindest sagen, dass Sie die Ansicht zwingen können, sich selbst zu zeichnen, bevor Sie viewDidAppear
:.
Entweder können Sie in Ihrem viewDidLoad:
-Aufruf:
view.setNeedsLayout()
view.layoutIfNeeded()
Oder wenn Sie es von "außerhalb" erstellen:
let vc = UIViewController()
let _ = vc.view
oder
let vc = UIViewController()
vc.view.setNeedsLayout()
vc.view.layoutIfNeeded()
Kurze Antwort: UIScreen.mainScreen (). bounds.size.width gibt immer die Breite des Bildschirms zurück.
Lange Antwort: Es klingt, als ob Sie das automatische Layout mit Größenklassen verwenden. Sie können dies alles nur mithilfe von Einschränkungen arbeiten. Sie können eine proportionale Beschränkung für Breite und Höhe von Ihrer Kachel zu Ihrem Container festlegen, sodass die Kachel 10% der Breite und Höhe des Containers beträgt. Dann können Sie alle anderen Kacheln so einstellen, dass sie dieselbe Breite und Höhe wie diese Kachel haben. Verwenden Sie dann Einschränkungen, um sie in einem Raster zu positionieren.
Eine andere Strategie, die das automatische Layout verwendet, besteht darin, den Abstand zwischen den Zellen auf 0 zu setzen und die Breite und Höhe frei zu lassen. Wenn Sie 10 Zellen mit 0 Abstand zwischen den Zellen und 0 Abstand zwischen den vorderen und hinteren Zellen und dem Container haben, dann nehmen sie automatisch 1/10 der Breite des Containers an.
Zusätzliche Anmerkung: Wenn Sie Größenklassen / automatisches Layout verwenden, wird die Ansichtsgröße erst richtig festgelegt, wenn Teilansichten angeordnet sind. Wenn Sie also beispielsweise in viewDidLoad versuchen, diese Breite zu verwenden, wäre die Breite immer noch die Breite der Any Any Größenklasse (600).
Tags und Links ios swift storyboard autolayout