Что делает UIView layer.masksToBounds, если установлено в YES?
Кто-нибудь знает? Я нашел несколько ответов, но они были слишком сложными и слишком глубокими. Мне нужен простой ответ.
3 ответа
Если masksToBounds
для свойства установлено значение YES, любые подслои слоя, выходящие за его границы, будут обрезаны до этих границ. В этом случае думайте о слое как о окне на его подслои; все, что находится за пределами окна, не будет видно. когда masksToBounds
НЕТ, отсечение не происходит, и любые подслои, которые выходят за пределы границ слоя, будут видны целиком (до тех пор, пока они не выходят за границы любого суперслоя, для которого включена маскировка).
Дизайн ввода в раскадровке
@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
= применяетсяmask
что равноboundaries
+cornerRadius
clipsToBounds
и эквивалентны
по умолчаниюfalse
именно поэтому все подслои способны выходить за границы [About] . Когда он являетсяtrue
все подслои обрезаются (учитывается радиус угла). Обратите внимание, что подслои
- слои подпредставления
- подслои текущего слоя
- тени
Пример:
== ложь:
masksToBounds
== правда:
границы против рамки: повернуть на 45 градусов
Для отладки из Xcode v11.4
Debug View Hierarchy
- show layers: Editor -> Show Layers
- show as it was: Editor -> Show Clipped Content