有人知道吗?我找到了一些答案,但太复杂、太深入了。我需要一个简单的答案。
如果
masksToBounds
属性设置为 YES,则任何延伸到其边界之外的图层子图层都将被剪裁到这些边界。在这种情况下,可以将图层视为其子图层的窗口;窗口边缘之外的任何内容都将不可见。当 masksToBounds
为 NO 时,不会发生剪切,并且任何延伸到图层边界之外的子图层都将完全可见(只要它们不超出任何启用了遮罩的超级图层的边缘)。
在故事板中输入设计
@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 后的输出。超级视图剪辑了子视图在超级视图之外的部分。
iOS UIView.clipsToBounds CALayer.masksToBounds
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