wake-up-neo.com

UIScrollView Scrollable Content Size Zweideutigkeit

Ich habe Probleme mit AutoLayout im Interface Builder (Xcode 5/iOS 7). Es ist sehr einfach und wichtig. Ich denke, jeder sollte wissen, wie dies richtig funktioniert. Wenn dies ein Fehler in Xcode ist, ist dies ein kritischer Fehler!

Immer wenn ich eine Ansichtshierarchie wie diese habe, stoße ich in Schwierigkeiten:

>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)

Die UIScrollView hat feste Einschränkungen, z. B. 50 px von jeder Seite (kein Problem) . Dann füge ich dem UILabel eine Top Space-Einschränkung hinzu (kein Problem) (und ich kann sogar Höhe/Breite der Beschriftung anbringen, ändert nichts , sollte aber aufgrund der intrinsischen Größe des Labels nicht erforderlich sein)

Das Problem beginnt, wenn ich dem UILabel eine nachstehende Einschränkung hinzufüge:

Zum Beispiel: Nachlaufender Raum nach: Superview Equals: 25

Nun treten zwei Warnungen auf - und ich verstehe nicht warum:

A) Mehrdeutigkeit für scrollbare Inhalte (die Scroll-Ansicht hat mehrdeutige scrollbare Inhaltshöhe breite)

B) Verschobene Ansichten (Label erwartet: x = -67 Tatsächlich: x = 207)

Ich habe dieses minimale Beispiel in einem neuen Projekt gemacht, das Sie herunterladen können, und ich habe einen Screenshot angehängt. Wie Sie sehen, erwartet der Interface Builder, dass sich das Label außerhalb der UIScrollView-Begrenzung (das orange gestrichelte Rechteck) befindet. Durch die Aktualisierung des Rahmens des Labels mit dem Tool zum Lösen von Problemen wird es direkt dorthin verschoben.

Bitte beachten Sie: Wenn Sie die UIScrollView durch eine UIView ersetzen, ist das Verhalten wie erwartet (der Rahmen des Labels ist korrekt und entspricht der Einschränkung). Es scheint also entweder ein Problem mit UIScrollView zu sein oder ich verpasse etwas Wichtiges.

Wenn ich die App ohne Aktualisierung des von IB vorgeschlagenen Rahmens des Labels ausführe, ist sie genau dort positioniert, wo sie sein soll, und die UIScrollView ist scrollbar. Wenn ich den Frame aktualisiere, ist das Label außer Sicht und das UIScrollView scrollt nicht.

Hilf mir, Obi-Wan Kenobi! Warum das mehrdeutige Layout? Warum die falsche Ansicht?

Sie können das Beispielprojekt hier herunterladen und versuchen, herauszufinden, was los ist: /- https://github.com/Wirsing84/AutoLayoutProblem

Illustration of the problem in Interface Builder

417
Wirsing

HINWEIS: Bei iOS> 10.0 wurde dies nicht getestet. Daher kann die Lösung in bestimmten Situationen unvollständig sein.

Also habe ich einfach so sortiert:

  1. Innerhalb von UIScrollViewadd a UIView (wir können das contentView nennen);

  2. In diesem contentView, setze den oberen, unteren, linken und rechten Rand auf 0 (natürlich von scrollView, das ist superView); Set zentriert auch horizontal und vertikal aus;

Fertig.

Jetzt können Sie alle Ihre Ansichten in contentView hinzufügen, und die contentSize von scrollView wird automatisch entsprechend der contentView-Größe angepasst.

Update:

Einige Sonderfälle werden von diesem Video von @Sergio in den Kommentaren unten behandelt.

918
Matteo Gobbi

Dieser Fehler hat eine Weile gedauert, bis ich herausgefunden habe. Anfangs habe ich versucht, die Größe des ScrollView zu fixieren, aber in der Fehlermeldung wird eindeutig "content size" angezeigt. Ich habe sichergestellt, dass alles, was ich oben in der ScrollView fixiert habe, auch ganz unten fixiert wurde. Auf diese Weise kann ScrollView die Inhaltshöhe berechnen, indem die Höhe aller Objekte und Einschränkungen ermittelt wird. Dies löste die mehrdeutige Inhaltshöhe, die Breite ist ziemlich ähnlich ... Anfangs hatte ich die meisten Dinge X in der ScrollView zentriert, aber ich musste die Objekte auch an die ScrollView-Seite anbringen. Ich mag das nicht, weil das iPhone6 ​​zwar einen breiteren Bildschirm hat, aber der Fehler "Mehrdeutiger Inhalt" wird entfernt.

91
self.name

Es ist die Antwort auf meine selbst beantwortete Frage UIScrollView + Zentrierte Ansicht + Ambigous Scrollable Content Size + viele iPhone-Größen .

Aber es deckt auch Ihren Fall vollständig ab!

Hier ist also der Ausgangszustand für den einfachsten Fall:

  1. scrollView mit 0 Einschränkungen für alle Kanten
  2. Schaltfläche zentriert Horizontal und Vertikal mit Einschränkungen für feste Breite und Höhe
  3. Und natürlich - ärgerliche WarnungenHas ambiguous scrollable content width und Has ambiguous scrollable content height.

1

Alles was wir tun müssen ist:

  • Fügen Sie zwei zusätzliche Einschränkungen hinzu, z. B. "0" für den Bereich trailing und/oder bottom für unsere Ansicht (siehe Beispiel im Screenshot unten).

Wichtig: Sie müssen nachlaufende und/oder untere - Einschränkungen hinzufügen. Nicht "führen und top" - es funktioniert nicht!

2

Sie können in meinem Beispielprojekt nachlesen, wie dieses Problem behoben werden kann.

P.S.

Nach der Logik - diese Aktion sollte "widersprüchliche Einschränkungen" verursachen. Aber nein!

Ich weiß nicht, warum es funktioniert und wie Xcode erkennt, welche Einschränkung mehr Priorität hat (weil ich für diese Einschränkungen keine Priorität habe). Ich bin dankbar, wenn jemand erklärt, warum dies in Kommentaren unten funktioniert.

60
skywinder

Sie müssen eine UIView als Unteransicht der UIScrollView erstellen, wie im Folgenden beschrieben:

  • UIViewController
  • UIView 'Hauptansicht'
    • UIScrollView
      • UIView 'Containeransicht'
        • [Ihr Inhalt]

Der zweite Schritt ist die Festlegung der UIScrollView-Einschränkungen. Ich habe dies mit der oberen, unteren, führenden und nachlaufenden Einschränkung für seine SuperView durchgeführt.

Als Nächstes habe ich die Einschränkungen für den Container von UIScrollView hinzugefügt. Hier beginnt das Problem. Wenn Sie die gleichen Einschränkungen (oben, unten, führende und nachstehende) festlegen, gibt das Storyboard eine Warnmeldung aus: 

"Hat mehrdeutige scrollbare Inhaltsbreite" und "hat mehrdeutige scrollbare Inhaltshöhe"

Fahren Sie mit den gleichen Einschränkungen fort und fügen Sie einfach die EinschränkungenEqual HeightundEqual Widthzu Ihrer Containeransicht in Bezug auf die Hauptansicht und nicht zu Ihrer UIScrollView hinzu. . Mit anderen Worten sind die Einschränkungen der Containeransicht an die UIScrollView-Übersicht gebunden.

Danach werden keine Warnungen in Ihrem Storyboard angezeigt, und Sie können die Einschränkungen für Ihre Unteransichten hinzufügen.

45
Thiago Monteiro

Ich habe es endlich herausgefunden, ich hoffe, das ist einfacher zu verstehen. 

Sie können diese Warnung häufig umgehen, indem Sie der Scroll-Ansicht eine Basis-UIView als "Inhaltsansicht" hinzufügen, wie bereits erwähnt, die gleiche Größe wie die Bildlaufansicht festlegen und in dieser Inhaltsansicht diese 6 Parameter einstellen. 

 enter image description here

Wie Sie sehen, benötigen Sie insgesamt 6 Parameter! Unter normalen Umständen duplizieren Sie zwei Einschränkungen, aber dies ist der Weg, um diesen Storyboard-Fehler zu vermeiden.

24
William T.

iOS 12, Swift 4

Der einfachste Weg mit autolayout:

  1. Fügen Sie UIScrollView hinzu und befestigen Sie es mit 0,0,0,0 an der Übersicht (oder Ihrer gewünschten Größe).
  2. Fügen Sie in ScrollView UIView hinzu, befestigen Sie 0,0,0,0 an allen 4 Seiten und zentrieren Sie horizontally und vertically.
  3. Ändern Sie im Größeninspektor die bottom- und align center Y-Priorität auf 250. (Bei horizontalem Bildlaufwechsel trailing und align center X)
  4. Fügen Sie alle benötigten Ansichten in diese Ansicht ein. Vergessen Sie nicht , um die untere Einschränkung für die unterste Ansicht festzulegen.
20

Ich weiß, dass ich möglicherweise zu spät komme, aber die nächste Lösung löst diese Art von Problemen ohne zusätzlichen Code, nur mit Storyboards:

Für Ihre Inhaltsansicht müssen Sie Einschränkungen für führende/nachlaufende/obere/untere Leerzeichen für die Bildlaufansicht festlegen. Durch wird der Inhaltsansicht-Frame nicht geändert. enter image description here

Natürlich müssen Sie zusätzliche Einschränkungen für die Inhaltsansicht erstellen, damit die Bildlaufansicht die Inhaltsgröße kennen kann. Stellen Sie beispielsweise feste Höhe und Mitte x ein.

Hoffe das hilft.

14
Borzh

Schauen Sie sich dieses wirklich schnelle und auf den Punkt gebrachte Tutorial an, wie man die Scroll-Ansicht zum Laufen bringt und mit automatischem Layout voll scrollbar ist. Das einzige, was mich immer noch verwirrt, ist, warum der Inhalt der Bildlaufansicht immer größer ist als nötig.

http://samwize.com/2013/03/14/how-to-use-uiscrollview-with-autolayout/

6
Mike Simz

Das Hinzufügen eines contentView funktionierte für mich nicht wie vorgeschlagen. Darüber hinaus verursacht es aufgrund der hinzugefügten Ansicht einen Overhead (obwohl ich dies nicht als großes Problem betrachte). Was für mich am besten funktionierte, war nur Deaktivieren der Mehrdeutigkeitsprüfung für mein _ scrollView. Alles ist gut angelegt, also denke ich, dass es in einfachen Fällen wie meinen okay ist. Denken Sie jedoch daran, dass der Interface-Builder nicht Sie warnt, falls andere Einschränkungen für scrollView brechen.

 enter image description here

3
Nick Podratz

Siehe unten: Inhaltsansicht in vertikaler und horizontaler ScrollView-Ansicht . Sie haben einen Mehrdeutigkeitsfehler. Stellen Sie immer sicher, dass zwei aus der Inhaltsansicht hinzugefügte 1) .button Leertaste zu container.2) sind Bildschirmfoto, 

diese Einschränkung bedeutet beim Scrollen, wie viel Sie nach der Höhe oder Breite Ihrer Inhaltsansicht scrollen können.

 enter image description here

es kann dir helfen.

3
Ravi H Malviya

@Matteo Gobbis Antwort ist perfekt, aber in meinem Fall kann der Bildlauf nicht scrollen. Ich entferne " Align Center Y " und füge " height> = 1 " hinzu. Der Bildlauf wird scrollbar 

2
ygweric

Ich habe diese Art von Problem für meine Ansicht gelöst, indem ich "Probleme mit dem automatischen Layout beheben"> "Fehlende Einschränkungen hinzufügen" für "Ausgewählte Ansicht" verwendet habe enter image description here

Die folgenden zwei Einschränkungen lösen mein Problem:

trailing = Stack View.trailing - 10
bottom = Stack View.bottom + 76

in dem: Trailing, Bottom das Trailing, Bottom von UIScrollView sind

2
Linh Dao

Personen, die mit uiscrollview nicht scrollen, legen keinen Bildlauf fest. Sie legen lediglich die unterste Einschränkung Ihrer Inhaltsansicht mit dem untersten Layout der letzten Ansicht (das sich innerhalb Ihrer Inhaltsansicht befindet) fest. Vergessen Sie nicht, die mittlere Y-Einschränkung zu entfernen. 

Alle Einschränkungen sind die gleichen wie oben definiert. Scrollview ist nur darauf bedacht, aus der Inhaltsansicht die maximale Höhe zu erhalten, und wir setzen sie als unterste Einschränkung der letzten Ansicht. Das bedeutet, dass ScrollView automatisch den Inhaltsversatz ändert.

In meinem Fall war die letzte Ansicht UILable mit no of lines Eigenschaft = 0 (wodurch die Höhe automatisch in Abhängigkeit vom Inhalt angepasst wird), sodass die Höhe von Uilable dynamisch erhöht wird. Schließlich wird der Bildlaufbereich vergrößert, da das untere Layout von Uilable am unteren Rand unserer Inhaltsansicht ausgerichtet ist was zwingt Scrollview, den Offset des Inhalts zu erhöhen. 

import UIKit

class ViewController: UIViewController {

    //
    let scrollView: UIScrollView = {

        let sv = UIScrollView()
        sv.translatesAutoresizingMaskIntoConstraints = false
        return sv
    }()

    let lipsumLbl: UILabel = { // you can use here any of your subview

        let lbl = UILabel()
        lbl.translatesAutoresizingMaskIntoConstraints = false
        lbl.text = """
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eleifend nisi sit amet mi aliquet, ut efficitur risus pellentesque. Phasellus nulla justo, scelerisque ut libero id, aliquet ullamcorper lectus. Integer id iaculis nibh. Duis feugiat mi vitae magna tincidunt, vitae consequat dui tempor. Donec blandit urna nec urna volutpat, sit amet sagittis massa fringilla. Pellentesque luctus erat nec dui luctus, sed maximus urna fermentum. Nullam purus nibh, cursus vel ex nec, pulvinar lobortis leo. Proin ac libero rhoncus, bibendum lorem sed, congue sapien. Donec commodo, est non mollis malesuada, nisi massa tempus ipsum, a varius quam lorem vitae nunc.

        Cras scelerisque nisi dolor, in gravida ex ornare a. Interdum et malesuada fames ac ante ipsum primis in faucibus. Maecenas vitae nisl id erat sollicitudin accumsan sit amet viverra sapien. Etiam scelerisque vulputate ante. Donec magna nibh, pharetra sed pretium ac, feugiat sit amet mi. Vestibulum in ipsum vitae dui vehicula pulvinar eget ut lectus. Fusce sagittis a elit ac elementum. Fusce iaculis nunc odio, at fermentum dolor varius et. Suspendisse consectetur congue massa non gravida. Sed id elit vitae nulla aliquam euismod. Pellentesque accumsan risus dolor, eu cursus nibh semper id.

        Vestibulum vel tortor tellus. Suspendisse potenti. Pellentesque id sapien eu augue placerat dictum. Fusce tempus ligula at diam lacinia congue in ut metus. Maecenas volutpat tellus in tellus maximus imperdiet. Integer dignissim condimentum lorem, id luctus nisi maximus at. Nulla pretium, est sit amet mollis eleifend, tellus nulla viverra dolor, ac feugiat massa risus a lectus. Pellentesque ut pulvinar urna, blandit gravida ipsum. Nullam volutpat arcu nec fringilla auctor. Integer egestas enim commodo, faucibus neque ac, rutrum magna. Vivamus tincidunt rutrum auctor. Cras at rutrum felis. Fusce elementum lorem ut pharetra venenatis.
        """
        lbl.textColor = .darkGray
        lbl.font = UIFont.systemFont(ofSize: 16)
        lbl.numberOfLines = 0
        return lbl
    }()

    //======================================================================//
    //
    // MARK:- viewDidLoad
    //
    override func viewDidLoad() {
        super.viewDidLoad()

        setupViews()
        setupAutoLayout()
    }

    func setupViews() {

        title = "ScrollView Demo"
        view.backgroundColor = .white
        view.addSubview(scrollView)
        scrollView.addSubview(lipsumLbl)
    }

    func setupAutoLayout() {

        scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

        lipsumLbl.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        lipsumLbl.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        lipsumLbl.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        lipsumLbl.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        lipsumLbl.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    }
}

Ausgabe:

enter image description here

1
iAj

Wenn Sie contentView (UView) als Container innerhalb von UIScrollView verwenden, halten Sie sich an die Kanten (top, bottom, trailing, leading) des Superview (UIScrollView) und contentView müssen equalwidth und equalheight zum Superview haben. Das sind Einschränkungen. Und Aufruf der Methode:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.scrollView.contentSize = self.contentView.frame.size;
}

Gelöste Probleme für mich.

1
Spiridon Kopicl

Ich habe ein Video bei youTube gemacht 
Scrollen Sie StackViews nur mit Storyboard in Xcode

Ich denke, zwei Arten von Szenarien können hier erscheinen.

Die Ansicht in der ScrollView -

  1. hat keinen intrinsischen Inhalt Size (z. B. UIView)
  2. hat einen eigenen intrinsischen Inhalt Größe (z. B. UIStackView)

Für eine vertikal scrollbare Ansicht müssen Sie in beiden Fällen diese Einschränkungen hinzufügen:

  1. 4 Einschränkungen von oben, links, unten und rechts.

  2. Gleiche Breite der Bildlaufansicht (um das Bildlauf horizontal zu stoppen)

Sie benötigen keine anderen Einschränkungen für Ansichten, die über eine eigene inhaltliche Höhe verfügen.

 enter image description here


Für Ansichten ohne intrinsische Inhaltshöhe müssen Sie eine Höhenbeschränkung hinzufügen. Die Ansicht wird nur gescrollt, wenn die Höhenbeschränkung die Höhe der ScrollView überschreitet.

 enter image description here

1

Legen Sie die Größe des ViewControllers (die Größe, die die UIScrollView enthält) im Größeninspektor im Interface Builder auf Freeform fest. Alle sollten funktionieren.

Freeform-Einstellung im Größeninspektor im Interface Builder für den UIViewcontroller

0
nico

Vertikales Scrollen

  1. Fügen Sie eine UIScrollView mit den Einschränkungen 0,0,0,0 zur Übersicht hinzu.
  2. Fügen Sie in ScrollView eine UIView mit den Einschränkungen 0,0,0,0 zur Übersicht hinzu.
  3. Fügen Sie UIScrollView die gleiche Breitenbeschränkung für UIView hinzu.
  4. Höhe zu UIView hinzufügen.
  5. Fügen Sie der UIView Elemente mit Einschränkungen hinzu.
  6. Stellen Sie sicher, dass für das Element, das dem unteren Rand am nächsten liegt, eine Einschränkung für den unteren Rand von UIView besteht.
0
BitCon

Sie müssen nur sicherstellen, dass es eine Möglichkeit gibt, eine fortlaufende Zeile der Abhängigkeiten von oben nach unten in der Bildlaufansicht . [-X-X-X]

In meinem Fall - einer horizontalen Bildlauf-Bildlauf-Ansicht - musste ich außerdem für jedes untergeordnete Bild der Bildlauf-Ansicht Breiten- und Höhenbeschränkungen hinzufügen, obwohl Apples technischer Hinweis Ihnen dies nicht sagt.

0
johnnyMac

[getestet in XCode 7.2 und für iOS 9.2]

Was die Storyboard-Fehler und Warnungen unterdrückt hat, war das Einstellen der intrinsic size der Bildlaufansicht und der Inhaltsansicht (in meinem Fall eine Stapelansicht) auf Placeholder. Diese Einstellung finden Sie im Größeninspektor in Storyboard. Und es heißt: Das Festlegen einer intrinsischen Inhaltsgröße für die Entwurfszeit wirkt sich nur auf eine Ansicht aus, während sie im Interface Builder bearbeitet wird. Die Ansicht hat zur Laufzeit nicht diese intrinsische Inhaltsgröße.

Ich denke, dass wir damit nichts falsch machen. 

Hinweis: Im Storyboard habe ich alle Kanten der Bildlaufansicht an die Überblendung und alle Kanten der Stapelansicht an die Bildlaufansicht angeheftet. In meinem Code habe ich translatesAutoresizingMaskIntoConstraints sowohl für die Bildlaufansicht als auch für die Stapelansicht auf "false" gesetzt. Und ich habe keine Inhaltsgröße erwähnt. Wenn die Stapelansicht dynamisch wächst, stellen die im Storyboard festgelegten Einschränkungen sicher, dass der Stapel scrollbar ist. 

Die Storyboard-Warnung machte mich wahnsinnig und ich wollte die Dinge nicht horizontal oder vertikal zentrieren, um die Warnung zu unterdrücken. 

0
gtl_pm

Swift 4+ Ansatz:

1) Setzen Sie UIScrollView oben, unten, links und rechts auf 0

2) Fügen Sie in UIScrollView eine UIView hinzu und setzen Sie die oberen, unteren, führenden und nachlaufenden Ränder auf 0 (entspricht UIScrollView-Rändern). 

3) Der wichtigste Teil ist das Einstellen von Breite und Höhe. wobei die Höhenbeschränkung eine niedrige Priorität haben soll .

private func setupConstraints() {
    // Constraints for scrollView
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    // Constraints for containerView
    containerView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
    containerView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
    containerView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
    containerView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
    containerView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
    let heightConstraint = containerView.heightAnchor.constraint(equalTo: scrollView.heightAnchor)
    heightConstraint.priority = UILayoutPriority(rawValue: 250)
    heightConstraint.isActive = true
}
0
Gentian Sadiku

Ich habe den gleichen Fehler bekommen. Ich habe folgendes getan

  1. Ansicht (Überblick)
  2. ScrollView 0,0,600,600
  3. UIView in ScrollView: 0,0,600,600
  4. UIView enthält Bildansicht, Beschriftung

Fügen Sie nun vor/nach/oben/unten für scrollView (2) und dann UIView (3) hinzu.

Wählen Sie Ansicht (1) und Ansicht (3) und legen Sie Höhe und Gewicht gleich fest. Das Problem wurde behoben.

Ich habe das Video gemacht, das helfen wird:

https://www.youtube.com/watch?v=s-CPN3xZS1A

0
Vinod Joshi

Was ich gemacht habe, ist eine separate Inhaltsansicht, wie hier gezeigt. 

Die Inhaltsansicht ist Freiform und kann alle Unteransichten mit ihren eigenen Einschränkungen in Bezug auf die Inhaltsansicht hinzugefügt werden.

Die UIScrollView wird dem Hauptansicht-Controller hinzugefügt.

Programmatisch füge ich die über IBOutlet verknüpfte contentView zur Klasse hinzu und setze die ContentView von UIScrollView.

UIScrollView with ContentView via Interface Builder

0
Vlad

Wenn jemand ein Verhalten bekommt, bei dem die Bildlaufleiste auf den rechten Bildschirmen angezeigt wird, der Inhalt jedoch nicht verschoben wird, ist diese Tatsache möglicherweise zu überlegen:

Sie können auch Einschränkungen zwischen dem Inhalt der Bildlaufansicht und Objekten außerhalb der Bildlaufansicht verwenden, um eine feste Position für den Inhalt der Bildlaufansicht anzugeben, sodass der Inhalt scheinbar über der Bildlaufansicht zu schweben scheint.

Das ist aus Apples Dokumentation . Wenn Sie beispielsweise versehentlich Ihr oberes Label/Button/Img/View an die Ansicht außerhalb des Bildlaufbereichs (möglicherweise eine Kopfzeile oder etwas direkt über der Bildlaufansicht?) Anstatt der Inhaltsansicht angeheftet haben, würden Sie Ihre gesamte Inhaltsansicht einfrieren.

0
Dave G

Wie in den vorherigen Antworten erwähnt, sollten Sie eine benutzerdefinierte Ansicht in der Bildlaufansicht hinzufügen:

 The custom view is the ContentView marked in the image

Fügen Sie alle Ihre Unteransichten der Inhaltsansicht hinzu. Sie werden zu einem bestimmten Zeitpunkt feststellen, dass eine Bildlauf-Inhaltsansicht eine mehrdeutige Warnung bezüglich der Inhaltsgröße enthält. Sie sollten die Inhaltsansicht auswählen und auf die Schaltfläche "Automatisches Layoutproblem beheben" (in der rechten unteren Ecke) klicken des IB-Layouts) und wählen Sie die Option "Fehlende Einschränkungen hinzufügen".

 enter image description here

Wenn Sie das Projekt ausführen, aktualisiert die Bildlaufansicht jetzt automatisch die Inhaltsgröße. Es ist kein zusätzlicher Code erforderlich.

0
supergegs