clipsToBounds는 어떻게 작동합니까?


110

UIView속성 을 사용하는 방법을 알고 싶습니다 clipsToBounds.

공식 문서는 다음과 같이 말합니다.

clipsToBounds 특성

하위 뷰가 뷰의 경계로 제한되는지 여부를 결정하는 부울 값입니다.

토론
이 값을로 설정 YES하면 하위보기가 수신자의 경계에 잘 리게됩니다. 로 설정하면 NO프레임이 수신기의 가시적 경계를 넘어 확장되는 하위 뷰가 잘리지 않습니다. 기본값은 NO입니다.

그러나 이것이 정확히 무엇을 의미하는지 명확하지 않습니다. 어떻게 사용해야 clipsToBounds합니까? 이 속성을 YES정확히 설정하면 어떤 결과가 발생 합니까? 아니면 NO?

답변:


283

내 수퍼 뷰가 각면에 10 단위를 측정하는 상자이고 내 서브 뷰가으로 clipsToBounds설정되어 폭이 20 단위 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가 true가되어야하는 것은 viewA입니다.
aestusLabs

해당 뷰의 원래 뷰 프레임에서 표시되는 뷰는 탭 제스처가 작동하는 것입니다. 왜냐하면 내가 확인했지만 작동하지 않기 때문입니다.
Pravin Tate

2

이것은 간결한 빠른 답변과 수용된 답변을 의미합니다.

Apple이이 속성의 이름을 변경하는 경우 이름을 clipSubviewsToBounds.

방금 코드에서 버그가 발생했습니다. 상위 뷰의 높이가 0. 우리는 그 어떤 요소도 보지 못할 것으로 예상했습니다. 그러나 부모보기의 내용이 나타났습니다.

clipToBounds설정되지 않았기 때문 true입니다. 로 설정되면 true하위 뷰 높이가를 넘어 확장 할 수 없으므로 0전혀 표시되지 않습니다.


이 답변은 과소 평가됩니다
sasquatch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.