clipsToubounds:如果子視圖的范圍超出了父視圖的邊界,那么超出的部分就會被裁剪掉。
寫個Demo看看效果,代碼如下:
- (void)viewDidLoad {
[super viewDidLoad];
UIView *greenView = [UIView new];
greenView.frame = CGRectMake(0, 0, 300, 300);
greenView.backgroundColor = [UIColor greenColor];
greenView.center = self.view.center;
greenView.clipsToBounds = YES;
[self.view addSubview:greenView];
UIView *redView = [UIView new];
redView.frame = CGRectMake(0, 0, 100, 400);
redView.backgroundColor = [UIColor redColor];
redView.center = self.view.center;
[greenView addSubview:redView];
}
行結果如下:
將greenView的clipsTobounds屬性設為NO,其它不做任何改動(注意redView還是greenView的子視圖)
紅色視圖終于突破了綠色視圖的邊界。
masksToBounds : 很重要的屬性,可以用此屬性來防止子元素大小溢出父元素,如若防止溢出,請設為 true
這個 masksToBounds 屬性以及 UIView 中的 clipToBounds 屬性效果很相似,具體它們都做了哪些事情等以后在總結。簡單來說,這個 masksToBounds 會將任何超過圖層邊界的子圖層的部分截取掉。也就是說我們在一個設置了圓角效果的視圖上面添加一個大小相同的子視圖,子視圖的四個角會超過父視圖的圓角邊界并將其蓋住,通過設置 masksToBounds 屬性,子視圖的四個角會被截掉從而也顯示出圓角效果。
UIView * view = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];
view.backgroundColor =[UIColor redColor];
view.layer.cornerRadius=50;
//對于UIView不加下面這句話也是可以做出圓角效果,這里主要是測試網上的說法
view.layer.masksToBounds=YES;
[self.view addSubview:view];
iOS 9.0 之后UIButton設置圓角會觸發離屏渲染,而UIImageView里png圖片設置圓角不會觸發離屏渲染了,如果設置其他陰影效果之類的還是會觸發離屏渲染的。