clipToBounds如何工作?

我想知道如何使用UIView属性clipsToBounds

官方文件说明如下:

clipsToBounds 属性

一个布尔值,确定子视图是否被限制在视图的边界。

讨论
将此值设置为YES会导致子视图被剪裁到接收者的边界。 如果设置为NO ,那么其帧超出接收器可见边界的子视图不会被剪切。 默认值是NO

但我不清楚这意味着什么。 我应该如何使用clipsToBounds ? 将该属性设置为YES的后果YES什么? 还是去NO

如果我的超级视图是一个在每边测量10个单位的框,而我的子视图是20个单位宽, clipsToBounds设置为YES ,那么我只能看到适合clipsToBounds视图边界的子视图部分。 否则,如果clipsToBounds设置为NO ,我会看到整个子视图,即使是超视图以外的部分(假设我们仍然在屏幕上)。

作为一个视觉示例,请考虑故事板上设置的以下视图:

在这里输入图像描述

这是一个白色的UIView ,左上angular有一个简单的“1”或“2”的标签,这样我可以将它们视为view1view2 。 此外,黑色视图与白色视图大小相同,但是起始点位于白色视图的中心。

在视图控制器的viewDidLoad方法中,我们有以下代码:

Objective-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 } 

当我们运行代码并在模拟器或设备上查看时,我们得到以下结果:

在这里输入图像描述

因此,尽pipe这些视图被设置为相同( clipsToBounds除外),但它们看起来不一样。 这是clipsToBoundsfunction。 将其设置为YES将提供最高结果,而将其设置为NO提供最低结果。

如果我们debugging视图层次结构,我们可以更清楚地看到黑盒子实际上已经延伸到了白视图的边界,但是只有视图2在应用程序实际运行时显示了这个:

在这里输入图像描述