Wenn meine Übersicht eine Box ist, die 10 Einheiten auf jeder Seite misst, und meine Unteransicht 20 Einheiten breit ist und auf clipsToBounds
gesetzt ist YES
, wird nur der Teil der Unteransicht angezeigt, der in die Grenzen der Übersicht passt. Andernfalls wird if auf clipsToBounds
gesetztNO
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:
Dies ist ein Weiß UIView
, ein Etikett in der oberen linken Ecke mit einer einfachen "1" oder "2", damit ich diese als view1
oder 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:
Obwohl diese Ansichten identisch eingerichtet sind (außer clipsToBounds
), sehen sie anders aus. Das clipsToBounds
macht es. Wenn Sie es auf YES
einstellen, wird das obere Ergebnis angezeigt, während Sie es auf NO
das 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:
UITextView
Schatten nicht sichtbar sind, wenn dieclipsToBounds
Eigenschaft gleich der isttrue
; ? Wennfalse
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
clipToBounds
nicht eingestellt wartrue
. Sobald dies eingestellt ist, könnentrue
die Höhen der Unteransichten nicht mehr überschritten werden0
, sodass sie überhaupt nicht angezeigt werden .quelle