Jeśli mój superwidok to pole o wymiarach 10 jednostek z każdej strony, a mój widok podrzędny ma 20 jednostek szerokości, z clipsToBounds
ustawieniem na YES
, zobaczę tylko część widoku podrzędnego, która mieści się w granicach widoku podrzędnego. W przeciwnym razie, jeśli clipsToBounds
jest ustawiona na NO
, zobaczę cały widok podrzędny, nawet części poza podglądem superwizji (zakładając, że nadal jesteśmy na ekranie).
Jako wizualny przykład rozważ następujące widoki skonfigurowane w scenorysie:
To jest biała UIView
, etykieta w lewym górnym rogu z prostym „1” lub „2”, więc mogę je omówić jako view1
lub view2
. Dodatkowo widok czarny ma taki sam rozmiar jak widok biały, ale jego początek znajduje się w środku widoku białego.
W viewDidLoad
metodzie kontrolera widoku mamy następujący kod:
Cel C:
- (void)viewDidLoad {
[super viewDidLoad];
self.view1.clipsToBounds = YES;
self.view2.clipsToBounds = NO;
}
Szybki:
override func viewDidLoad() {
super.viewDidLoad()
self.view1.clipsToBounds = true
self.view2.clipsToBounds = false
}
Kiedy uruchamiamy kod i patrzymy na niego w symulatorze lub na urządzeniu, otrzymujemy następujące wyniki:
Tak więc, pomimo identycznej konfiguracji tych widoków (z wyjątkiem clipsToBounds
), wyglądają one inaczej. To jest to, co clipsToBounds
robi. Ustawienie jej na YES
zapewni najwyższy wynik, a ustawienie NO
na najniższy wynik.
Jeśli debugujemy hierarchię widoku, zobaczymy wyraźniej, że oba czarne pola faktycznie wykraczają poza granice białego widoku, ale tylko widok 2 pokazuje to, gdy aplikacja jest faktycznie uruchomiona:
UITextView
cienie nie są widoczne, jeśliclipsToBounds
właściwość jest równatrue
; ? Jeśli takfalse
, działa dobrzeMa to być zwięzła, szybka odpowiedź w porównaniu z akceptowaną odpowiedzią
Jeśli Apple było zmienić nazwę tę właściwość, chciałbym wymienić go:
clipSubviewsToBounds
.Właśnie natrafiłem na błąd w naszym kodzie. Gdzie ustawiono wysokość widoku macierzystego
0
. Spodziewaliśmy się, że nie zobaczymy żadnego z jego elementów. Jednak zawartość widoku rodziców pojawiała się.To dlatego, że
clipToBounds
nie był ustawionytrue
. Po ustawieniutrue
wysokości podglądów podrzędnych nie może wykraczać poza0
, więc w ogóle się nie wyświetlają.źródło