nhg*_*rif 264
如果我的superview是一个盒子,每侧有10个单位,而我的子视图是20个单位宽,clipsToBounds
设置为YES
,我只会看到子视图中符合superview范围的部分.否则,如果clipsToBounds
设置为NO
,我将看到整个子视图,甚至是超视图外的部分(假设我们仍然在屏幕上).
作为可视示例,请考虑在故事板上设置以下视图:
这是一个白色的UIView
左上角标签,带有简单的"1"或"2",以便我可以将它们作为view1
或讨论view2
.此外,黑色视图与白色视图的大小相同,但它的原点位于白色视图的中心.
在视图控制器的viewDidLoad
方法中,我们有以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
self.view1.clipsToBounds = YES;
self.view2.clipsToBounds = NO;
}
Run Code Online (Sandbox Code Playgroud)
override func viewDidLoad() {
super.viewDidLoad()
self.view1.clipsToBounds = true
self.view2.clipsToBounds = false
}
Run Code Online (Sandbox Code Playgroud)
当我们运行代码并在模拟器或设备上查看时,我们得到以下结果:
因此,尽管这些视图设置相同(除外clipsToBounds
),但它们看起来不同.这是做什么的clipsToBounds
.将其设置为YES
将提供最高结果,同时将其设置为NO
提供最低结果.
如果我们调试视图层次结构,我们可以更清楚地看到黑盒实际上都延伸到白色视图的边界之外,但只有视图2在应用程序实际运行时显示:
与公认的答案相比,这是一个简洁的快速答案
如果 Apple 要重命名此属性,我会将其命名为:clipSubviewsToBounds
.
我刚刚在我们的代码中遇到了一个错误。父视图的高度设置为0
. 我们希望看不到它的任何元素/子视图。然而,父视图的子视图出现了。
那是因为clipToBounds
没有设置为true
. 一旦设置为true
,子视图的高度就不能超出0
,一旦它们达到其父视图的高度,它们就会被剪裁到。在这种情况下,它们会被剪掉,0
即它们根本不显示。
归档时间: |
|
查看次数: |
59389 次 |
最近记录: |