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


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

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

clipsToBoundsсвойства

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

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

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

2 83

2 ответа:

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

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

enter image description here

белое 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
}

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

enter image description here

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

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

enter image description here

uiview и текстовое поле с тенью Swift 4

self.txtCurrent.layer.shadowOpacity = 0.5
self.txtCurrent.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)          
self.txtCurrent.layer.shadowRadius = 5.0
self.txtCurrent.layer.shadowColor = UIColor.black.cgColor
self.txtCurrent.layer.masksToBounds = false

uiview с тенью

self.yourview.layer.shadowOpacity = 0.5
self.yourview.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.yourview.layer.shadowRadius = 5.0
self.yourview.layer.shadowColor = UIColor.black.cgColor
self.yourview.layer.masksToBounds = false