Если мой супервизор представляет собой блок размером 10 единиц с каждой стороны, а мой подпредставление имеет ширину 20 единиц с clipsToBounds
установленным значением YES
, я увижу только ту часть подпредставления, которая вписывается в границы супервизора. В противном случае, если clipsToBounds
установлено значение NO
, я увижу все подпредставление, даже части вне супервизора (при условии, что мы все еще на экране).
В качестве наглядного примера рассмотрим следующие представления, установленные на раскадровке:
Это белая UIView
метка в верхнем левом углу с простой цифрой «1» или «2», чтобы я мог обсуждать их как view1
или view2
. Кроме того, черный вид имеет тот же размер, что и белый, но его исходная точка находится в центре белого вида.
В viewDidLoad
методе контроллера представления у нас есть следующий код:
Цель-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 показывает это, когда приложение действительно работает:
UITextView
не видны тени, еслиclipsToBounds
свойство равноtrue
; ? Если это такfalse
, отлично работает