如果设置为 YES,UIView layer.masksToBounds 会做什么?

问题描述 投票:0回答:3

有人知道吗?我找到了一些答案,但太复杂、太深入了。我需要一个简单的答案。

iphone uiview
3个回答
149
投票

如果

masksToBounds
属性设置为 YES,则任何延伸到其边界之外的图层子图层都将被剪裁到这些边界。在这种情况下,可以将图层视为其子图层的窗口;窗口边缘之外的任何内容都将不可见。当
masksToBounds
为 NO 时,不会发生剪切,并且任何延伸到图层边界之外的子图层都将完全可见(只要它们不超出任何启用了遮罩的超级图层的边缘)。


8
投票

在故事板中输入设计

@IBOutlet weak var purpleView: UIView!  // view inside super view
@IBOutlet weak var yellowView: UIView!  // super view

override func viewDidLoad() {
    super.viewDidLoad()

    yellowView.layer.cornerRadius = 20
    yellowView.layer.masksToBounds = true
    
    // Do any additional setup after loading the view.
}

maskToBounds = true 后的输出。超级视图剪辑了子视图在超级视图之外的部分。


0
投票

iOS UIView.clipsToBounds CALayer.masksToBounds

[CALayer]

[CALayer.mask]

masksToBounds
= 应用
mask
,等于
boundaries
+
cornerRadius

UIView.clipsToBounds
CALayer.masksToBounds
是等效的

masksToBounds
默认为
false
,这就是为什么所有子层都能够超出 边界[关于]。当它为
true
时,所有子层都被 clipped(考虑角半径)。请注意,子层是

  • 子视图的图层
  • 当前层的子层
  • 阴影

示例:

masksToBounds
==假:

masksToBounds
==正确:

边界与框架: 旋转45度

从 Xcode v11.4 进行调试

Debug View Hierarchy 
 - show layers: Editor -> Show Layers
 - show as it was: Editor -> Show Clipped Content
© www.soinside.com 2019 - 2024. All rights reserved.