clipToBounds如何工作?
我想知道如何使用UIView
属性clipsToBounds
。
官方文件说明如下:
clipsToBounds
属性一个布尔值,确定子视图是否被限制在视图的边界。
讨论
将此值设置为YES
会导致子视图被剪裁到接收者的边界。 如果设置为NO
,那么其帧超出接收器可见边界的子视图不会被剪切。 默认值是NO
。
但我不清楚这意味着什么。 我应该如何使用clipsToBounds
? 将该属性设置为YES
的后果YES
什么? 还是去NO
?
如果我的超级视图是一个在每边测量10个单位的框,而我的子视图是20个单位宽, clipsToBounds
设置为YES
,那么我只能看到适合clipsToBounds
视图边界的子视图部分。 否则,如果clipsToBounds
设置为NO
,我会看到整个子视图,即使是超视图以外的部分(假设我们仍然在屏幕上)。
作为一个视觉示例,请考虑故事板上设置的以下视图:
这是一个白色的UIView
,左上angular有一个简单的“1”或“2”的标签,这样我可以将它们视为view1
或view2
。 此外,黑色视图与白色视图大小相同,但是起始点位于白色视图的中心。
在视图控制器的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
除外),但它们看起来不一样。 这是clipsToBounds
function。 将其设置为YES
将提供最高结果,而将其设置为NO
提供最低结果。
如果我们debugging视图层次结构,我们可以更清楚地看到黑盒子实际上已经延伸到了白视图的边界,但是只有视图2在应用程序实际运行时显示了这个: