Как работает ClipToBounds?

Я хотел бы знать, как использовать свойство UIView clipsToBounds.

В официальной документации говорится следующее:

clipsToBounds свойство

Логическое значение, определяющее, ограничиваются ли подзоны границы представления.

Обсуждение
Установка этого значения в значение YES приводит к обрезанию субвью границ приемника. Если установлено значение NO, субсведы, чьи рамки расширяются за пределами видимых границ приемника не обрезаются. По умолчанию значение NO.

Но я не понимаю, что именно это означает. Как использовать clipsToBounds? Каковы последствия установки этого свойства в YES точно? Или NO?

Ответ 1

Если мой супервизор - это ящик размером 10 единиц с каждой стороны, а мой субвью - 20 единиц, при clipsToBounds установленном на YES, я увижу только часть подсмотра, которая соответствует границам надзор. В противном случае, если для параметра clipsToBounds установлено значение NO, я увижу все подвью, даже части вне супервизора (предположим, что мы все еще на экране).

В качестве наглядного примера рассмотрим следующие представления, созданные на раскадровке:

enter image description here

Это белый 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
}

Когда мы запускаем код и смотрим в симуляторе или на устройстве, мы получаем следующие результаты:

enter image description here

Итак, несмотря на то, что эти представления настроены одинаково (кроме clipsToBounds), они выглядят по-разному. Это то, что делает clipsToBounds. Установка его на YES обеспечит верхний результат, а при настройке на NO - нижний результат.

Если мы отлаживаем иерархию представлений, мы можем более четко видеть, что черные ящики фактически проходят мимо границ белого представления, но только просмотр 2 показывает это, когда приложение действительно работает:

enter image description here