Ich habe mehrere Freiform-UIViewController erstellt, die für Bildlaufzwecke besonders lange Höhen und Breiten haben, die der Breite eines iPhone 8 Plus-Bildschirms entsprechen (da dies das physische Gerät ist, mit dem ich testen kann).

Mein Problem tritt auf, wenn ich versuche, meine App auf allen Geräten bis auf einen iPhone SE-Bildschirm funktionsfähig zu machen. Die Höhe ist kein Problem, aber die Breite verursacht ein Problem, da bei kleineren Bildschirmgrößen.

UIViewController ist offensichtlich breiter als der Bildschirm. Dies ermöglicht horizontales Scrollen / Schwenken. Mein Ziel ist es jedoch, dass der ViewController der Breite des verwendeten Bildschirms entspricht. Daher ist nur vertikales Scrollen möglich.

Ich habe versucht, die Breite des UIViewControllers anzupassen, wenn er angezeigt wird, aber das scheint keine Auswirkung zu haben. Ich bin mir wirklich nicht sicher, was ich sonst noch versuchen soll und kann online nichts dazu finden. Ist das eine offensichtliche Lösung oder mache ich etwas völlig falsch?

0
iandeboo 17 Mai 2019 im 04:40

4 Antworten

Beste Antwort

Um diese Frage richtig zu beantworten und für andere Personen, die dieses Problem haben könnten.

Die Größe des View Controllers wird automatisch an die Bildschirmgröße angepasst (vorausgesetzt, sie ist ordnungsgemäß konfiguriert).

Wenn Sie eine Bildlaufansicht in einem Ansichts-Controller haben, sollten Sie sicherstellen, dass die Kanten der Bildlaufansicht mithilfe von Einschränkungen für das automatische Layout mit der übergeordneten Ansicht (der Stammansicht des Ansichts-Controllers) verknüpft sind.

Außerdem muss der Inhalt der Bildlaufansicht so eingestellt sein, dass die Stammansicht als Positionsreferenz (zumindest horizontal) verwendet wird, da das automatische Layout sonst nicht weiß, wie mit der horizontalen Positionierung umgegangen werden soll.

Um dies zu erreichen, müssen Sie nur die innere Ansicht (die Ihre gesamte Bildlaufansicht ausfüllt) am linken und rechten Rand der Stammansicht des View Controllers anhängen.

0
Pochi 20 Mai 2019 im 03:31

Ich denke, Sie verwechseln Ihren UIViewController möglicherweise mit einer Ansicht. Wenn es sich bei Ihrer Ansicht um eine Bildlaufansicht handelt, können Sie die Inhaltsgröße der Bildlaufansicht so einstellen, dass sie der Breite Ihres Geräts entspricht und den gewünschten Effekt erzielt.

In Swift 3.0 und höher:

let screenWidth = UIScreen.main.bounds.width
yourScrollView.contentSize.width = screenWidth
0
Khanh Vu 17 Mai 2019 im 02:23

Um mehrere Breiten zu unterstützen, können Sie verschiedene Größenklassen verwenden, die in iOS verfügbar sind. Es gibt viele Tutorials für Einschränkungen in Bezug auf Größenklassen.

Wie https://www.bignerdranch.com/blog/ Entwerfen für Größenklassen in ios /, https://www.bignerdranch.com/blog/designing -für-Größenklassen-in-ios /

Sie sollten die Einschränkungen von View in Bezug auf die übergeordneten Ansichten angeben müssen, wenn dies für Ihr Design möglich ist.

0
Akash Soni 17 Mai 2019 im 06:12

Ich habe versucht, die Breite des UIViewControllers anzupassen, wenn er angezeigt wird

Mit "Präsentieren" meinen Sie die viewDidLoad Methode? Ich denke nicht, dass dies der beste Ort ist, um die Breite anzupassen, da die Sichtgrenzen derzeit noch nicht bekannt sind. Außerdem wird die Methode viewDidLoad nicht aufgerufen, wenn Geräte gedreht werden.

Ich nehme an, Sie sollten die Breite der Bildlaufansicht in viewDidLayoutSubviews aktualisieren, die jedes Mal aufgerufen wird, wenn sich die Grenzen der Stammansicht im Ansichts-Controller ändern:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let screenWidth = UIScreen.main.bounds.width
    yourScrollView.contentSize.width = screenWidth  

    // I don't think you really need it 
    // but it may help
    yourScrollView.setNeedsLayout()
} 
0
NShiny 17 Mai 2019 im 06:32