iOS - UIView的clipsTobounds属性和mas
2020-05-20 本文已影响0人
恋空K
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图片设置圆角不会触发离屏渲染了,如果设置其他阴影效果之类的还是会触发离屏渲染的。