Ответ 1
Если мой супервизор - это ящик размером 10 единиц с каждой стороны, а мой субвью - 20 единиц, при clipsToBounds
установленном на YES
, я увижу только часть подсмотра, которая соответствует границам надзор. В противном случае, если для параметра clipsToBounds
установлено значение NO
, я увижу все подвью, даже части вне супервизора (предположим, что мы все еще на экране).
В качестве наглядного примера рассмотрим следующие представления, созданные на раскадровке:
Это белый UIView
, ярлык в верхнем левом углу с простым "1" или "2", чтобы я мог обсуждать их как view1
или view2
. Кроме того, черный вид имеет тот же размер, что и белый вид, но его начало находится в центре белого обзора.
В методе контроллера просмотра viewDidLoad
у нас есть следующий код:
Objective-C:
- (void)viewDidLoad {
[super viewDidLoad];
self.view1.clipsToBounds = YES;
self.view2.clipsToBounds = NO;
}
Swift:
override func viewDidLoad() {
super.viewDidLoad()
self.view1.clipsToBounds = true
self.view2.clipsToBounds = false
}
Когда мы запускаем код и смотрим в симуляторе или на устройстве, мы получаем следующие результаты:
Итак, несмотря на то, что эти представления настроены одинаково (кроме clipsToBounds
), они выглядят по-разному. Это то, что делает clipsToBounds
. Установка его на YES
обеспечит верхний результат, а при настройке на NO
- нижний результат.
Если мы отлаживаем иерархию представлений, мы можем более четко видеть, что черные ящики фактически проходят мимо границ белого представления, но только просмотр 2 показывает это, когда приложение действительно работает: