UIView.clipsToBounds 让子 View 只显示落在父 View 的 Frame 部分

默认情况下,我们向一个 View 中添加一个子 View 时,子 View 的越界部分也会显示出来,当然超过屏幕部分是显示不出来,因为无法在你手上显示内容了。看下面的图:

Unmi clipseToBounds     Unmi clipseToBounds

上图中,橙色的 View 是蓝色 View 的子 View。看左图,由它们的 Frame 设置,橙色的 View 部分超出的蓝色 View 的区域,默认情况下,蓝色 View 超出部分也会显示出来,除非在屏幕之外的部分。

而我们有时候不想要这种行为,希望越界部分不显示出来,像右图所示那盘。比如我们可能期望橙色 View 的动画效果只在它的父 View,即蓝色 View 之内展现。

其实问题很简单,正如标题中所提示的那个 clipToBounds 属性,字面意思是裁减到边界,就是超过父 View 的部分应该被裁减掉,而不显示。

只要设置父 View,即上图中的蓝色的 View 的 clipToBounds 为 YES 即可,默认为 NO.

blueView.clipToBounds = YES;

同时还应该考虑 CALayer 的 maskToBounds 的功能是什么,类似于 clipToBounds 吗?

maskToBounds 是 CALayer 的属性,基于 View  的不少属性其实就是作用于 CALayer 的。立即试验了一下,设置

blueView.layer.maskToBounds = YES 与 blueView.clipToBounds = YES 的效果是一样的,随便设置哪个属性都可。而且设置它们任何一个都会影响到 View 的阴影效果,因为阴影是加在 View 的 Frame 之外的,所以也被裁减去了。

在Objective-C中,如果你有一个`UIView`类型的变量`parentView`,并想刷新它,通常你可以调用视图的一些更新或布局相关的函数。例如,如果你想让视图重新布局,你可以使用`layoutIfNeeded`或者`layoutSubviews`方法。如果是改变内容,比如重新绘制,那么可以根据视图类型来调用对应的刷新方法,比如对于UIImageView可能是`setNeedsDisplay`,对于UILabel则是`setNeedsLayout`。 下面是针对`parentView`的一些常见操作示例: ```objc if ([parentView respondsToSelector:@selector(setNeedsDisplay)]) { [parentView setNeedsDisplay]; } else if ([parentView respondsToSelector:@selector(setNeedsLayout)]) { [parentView setNeedsLayout]; [parentView layoutIfNeeded]; // 如果视图需要重新计算大小和位置 } else if ([parentView respondsToSelector:@selector(reloadData)]) { // 这里假设parentView有一个reloadData方法用于刷新数据 [parentView reloadData]; } // 如果parentView是一个响应布局的容器视图(如UIScrollView) [parentView setContentOffset:CGPointZero animated:YES]; // 刷新滚动位置 [parentView scrollRectToVisible:CGRectMake(0, 0, parentView.bounds.size.width, parentView.bounds.size.height) animated:YES]; // 显示整个视图 // 如果需要更新frame,可以直接设置 [parentView setFrame:self.view.bounds]; // 将视图的frame设置为其视图的边界 ``` 请注意,上述代码取决于`parentView`的具体类型和需求。在实际应用中,你应该查阅相应的文档以获取正确的刷新方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值