我想知道如何使用UIView
属性clipsToBounds
。
官方文件说明如下:
clipsToBounds
property一个布尔值,用于确定子视图是否仅限于 观点的界限。
讨论
将此值设置为YES
会导致子视图被剪切为 接收器的界限。如果设置为NO
,则其框架的子视图会延伸 超出接收器的可见边界不会被剪裁。默认 值为NO
。
但我不清楚这究竟意味着什么。我应该如何使用clipsToBounds
?将此属性设置为YES
的确切后果是什么?或NO
?
答案 0 :(得分:251)
如果我的超级视图是一个盒子,每侧有10个单位,而我的子视图是20个单位宽,clipsToBounds
设置为YES
,我只会看到适合的子视图部分在超级视图的范围内。否则,如果clipsToBounds
设置为NO
,我会看到整个子视图,甚至是超视图外的部分(假设我们仍然在屏幕上)。
作为一个直观的例子,请考虑在故事板上设置以下视图:
这是一个白色UIView
,左上角有一个简单的“1”或“2”标签,因此我可以将其作为view1
或view2
进行讨论。此外,黑色视图与白色视图的大小相同,但它的原点位于白色视图的中心。
在视图控制器的viewDidLoad
方法中,我们有以下代码:
- (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
}
当我们运行代码并在模拟器或设备上查看时,我们得到以下结果:
因此,尽管这些视图设置相同(clipsToBounds
除外),但它们看起来不同。这就是clipsToBounds
的作用。将其设置为YES
将提供最佳结果,而将其设置为NO
会提供最终结果。
如果我们调试视图层次结构,我们可以更清楚地看到黑盒子实际上都延伸到白色视图的边界之外,但只有视图2在应用程序实际运行时显示:
答案 1 :(得分:4)
这是一个简短的快速答案,而不是公认的答案
如果Apple要重命名此属性,则将其命名为:clipSubviewsToBounds
。
我只是在我们的代码中遇到了一个错误。父视图的高度设置为0
的位置。
我们希望没有任何元素。然而,父视图的内容正在显示。
这是因为未将clipToBounds
设置为true
。一旦将其设置为true
,则子视图的高度将不能超出0
,一旦达到其父视图的高度,它们就会被裁剪。在这种情况下,它们将被裁剪为0
,即它们根本不显示。
答案 2 :(得分:0)
带有阴影Swift 4的uiview和文本字段
self.txtCurrent.layer.shadowOpacity = 0.5
self.txtCurrent.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.txtCurrent.layer.shadowRadius = 5.0
self.txtCurrent.layer.shadowColor = UIColor.black.cgColor
self.txtCurrent.layer.masksToBounds = false
带有阴影的uiview
self.yourview.layer.shadowOpacity = 0.5
self.yourview.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.yourview.layer.shadowRadius = 5.0
self.yourview.layer.shadowColor = UIColor.black.cgColor
self.yourview.layer.masksToBounds = false