Я хотел бы знать, как использовать свойство UIView
clipsToBounds
.
В официальной документации говорится следующее:
clipsToBounds
свойствоЛогическое значение, определяющее, ограничиваются ли подзоны границы представления.
Обсуждение
Установка этого значения в значениеYES
приводит к обрезанию субвью границ приемника. Если установлено значениеNO
, субсведы, чьи рамки расширяются за пределами видимых границ приемника не обрезаются. По умолчанию значениеNO
.
Но я не понимаю, что именно это означает. Как использовать clipsToBounds
? Каковы последствия установки этого свойства в YES
точно? Или NO
?
Если мой супервизор – это ящик размером 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 показывает это, когда приложение действительно работает: