Wie funktioniert clipsToBounds?

110

Ich würde gerne wissen, wie man die UIViewImmobilie nutzt clipsToBounds.

In der offiziellen Dokumentation heißt es:

clipsToBounds Eigentum

Ein boolescher Wert, der bestimmt, ob Unteransichten auf die Grenzen der Ansicht beschränkt sind.

Diskussion
Wenn Sie diesen Wert auf YESfestlegen, werden Unteransichten an die Grenzen des Empfängers gekürzt. Wenn diese NOOption aktiviert ist, werden Unteransichten, deren Frames über die sichtbaren Grenzen des Empfängers hinausragen, nicht abgeschnitten. Der Standardwert ist NO.

Aber ich bin mir nicht sicher, was das genau bedeutet. Wie soll ich verwenden clipsToBounds? Was sind die Konsequenzen einer genauen Einstellung dieser Eigenschaft YES? Oder zu NO?

Toshi
quelle

Antworten:

283

Wenn meine Übersicht eine Box ist, die 10 Einheiten auf jeder Seite misst, und meine Unteransicht 20 Einheiten breit ist und auf clipsToBoundsgesetzt ist YES, wird nur der Teil der Unteransicht angezeigt, der in die Grenzen der Übersicht passt. Andernfalls wird if auf clipsToBoundsgesetztNO die gesamte Unteransicht angezeigt, auch die Teile außerhalb der Übersicht (vorausgesetzt, wir sind noch auf dem Bildschirm).

Betrachten Sie als visuelles Beispiel die folgenden Ansichten, die im Storyboard eingerichtet wurden:

Geben Sie hier die Bildbeschreibung ein

Dies ist ein Weiß UIView, ein Etikett in der oberen linken Ecke mit einer einfachen "1" oder "2", damit ich diese als view1oder diskutieren kannview2 . Darüber hinaus hat die schwarze Ansicht dieselbe Größe wie die weiße Ansicht, ihr Ursprung liegt jedoch in der Mitte der weißen Ansicht.

In den View Controllern viewDidLoad Methode haben wir den folgenden Code:

Ziel c:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view1.clipsToBounds = YES;
    self.view2.clipsToBounds = NO;
}

Schnell:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view1.clipsToBounds = true
    self.view2.clipsToBounds = false
}

Wenn wir den Code ausführen und im Simulator oder auf dem Gerät betrachten, erhalten wir die folgenden Ergebnisse:

Geben Sie hier die Bildbeschreibung ein

Obwohl diese Ansichten identisch eingerichtet sind (außer clipsToBounds), sehen sie anders aus. Das clipsToBoundsmacht es. Wenn Sie es auf YESeinstellen, wird das obere Ergebnis angezeigt, während Sie es auf NOdas untere Ergebnis einstellen .

Wenn wir die Ansichtshierarchie debuggen, können wir deutlicher erkennen, dass die beiden schwarzen Kästchen tatsächlich über die Grenzen der weißen Ansicht hinausragen, aber nur Ansicht 2 zeigt dies, wenn die App tatsächlich ausgeführt wird:

Geben Sie hier die Bildbeschreibung ein

nhgrif
quelle
3
Fantastische Antwort! Gut gemacht. Aber ich habe eine Frage. Warum UITextViewSchatten nicht sichtbar sind, wenn die clipsToBoundsEigenschaft gleich der ist true; ? Wenn false
ja
1
Hinweis: Es ist die übergeordnete Ansicht, in der Sie clipsToBounds ändern. Wenn also viewB eine Unteransicht von viewA ist. Es ist viewA, dass clipsToBounds wahr gemacht werden muss.
aestusLabs
Welche Ansicht vom ursprünglichen Ansichtsrahmen in dieser Ansicht angezeigt wird, funktioniert durch Tippen mit einer Geste, da ich überprüfe und sie nicht funktioniert.
Pravin Tate
2

Dies soll eine prägnante schnelle Antwort gegenüber der akzeptierten Antwort sein

Wenn Apple diese Eigenschaft umbenennen würde, würde ich sie benennen : clipSubviewsToBounds.

Ich bin gerade auf einen Fehler in unserem Code gestoßen. Wo die Höhe der übergeordneten Ansicht eingestellt war 0. Wir haben erwartet, keines seiner Elemente zu sehen. Der Inhalt der übergeordneten Ansicht wurde jedoch angezeigt.

Es war, weil clipToBoundsnicht eingestellt war true. Sobald dies eingestellt ist, können truedie Höhen der Unteransichten nicht mehr überschritten werden 0, sodass sie überhaupt nicht angezeigt werden .

Honig
quelle
Diese Antwort wird viel unterschätzt
Sasquatch