Як працює clipsToBounds?


110

Я хотів би знати, як користуватися UIViewмайном clipsToBounds.

В офіційній документації зазначено:

clipsToBounds майно

Булеве значення, яке визначає, чи обмежені підгляди до меж перегляду.

Обговорення
Встановлення цього значення YESспричиняє призупинення підзаписів до меж приймача. Якщо встановлено значення NO, підзагляди, рамки яких виходять за межі видимих ​​меж приймача, не відсікаються. Значенням за замовчуванням є NO.

Але мені незрозуміло, що це означає саме. Як мені користуватися clipsToBounds? Які наслідки встановлення цієї властивості YESточно? Або до NO?

Відповіді:


283

Якщо мій нагляд - це вікно розміром 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;
}

Швидкий:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view1.clipsToBounds = true
    self.view2.clipsToBounds = false
}

Коли ми запускаємо код і заглядаємо в тренажер або на пристрій, ми отримуємо такі результати:

введіть тут опис зображення

Отже, незважаючи на те, що ці погляди налаштовані однаково (крім clipsToBounds), вони виглядають інакше. Це те, що clipsToBoundsробить. Встановивши його, YESце забезпечить верхній результат, а встановивши NOнижній результат.

Якщо ми налагоджуємо ієрархію перегляду, ми можемо чіткіше бачити, що і чорні поля насправді проходять повз межі білого виду, але лише перегляд 2 показує це, коли програма насправді працює:

введіть тут опис зображення


3
Фантастична відповідь! Молодці. Але у мене є питання. Чому UITextViewтіні не видно, якщо clipsToBoundsвластивість дорівнює true; ? Якщо це так false, працює чудово
Mannopson

1
Примітка. Це батьківський вигляд, на який ви змінюєте clipsToBounds. Отже, якщо viewB - це підвид viewA. Зрозуміло, що clipsToBounds потрібно виконати.
esteusLabs

Який вигляд відображається з оригінального кадру перегляду на цьому вікні - це натискання жестів, оскільки я перевіряю, і він не працює.
Pravin Tate

2

Це означає бути стислий швидкою відповіддю проти прийнятої відповіді

Якщо Apple був перейменувати це властивість, я б назвав його: clipSubviewsToBounds.

Я просто натрапив на помилку в нашому коді. Там, де встановлено висоту батьківського виду 0. Ми очікували побачити жоден його елемент. Проте вміст батьківського перегляду відображався.

Це було тому, що clipToBoundsне було встановлено true. Після того, як встановлено встановлене значення, trueто висота підвідного перегляду не може перевищувати 0, тому вони взагалі не відображаються


Ця відповідь є недооціненою
sasquatch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.