Dru*_*erB 23 cocoa objective-c calayer nsview clip
是否有可能NSView 不剪辑其超出边界的子视图?在iOS上,我只想设置clipsToBounds我的UIView号码NO.但是NSView没有这样的财产.我试图用试验wantsLayer,masksToBounds,wantsDefaultClipping,但所有这些似乎只改变的裁剪drawRect方法,而不是子视图.
Ava*_*rio 13
围绕这一点的行为似乎已经改变。您只需要将视图的图层设置为不屏蔽边界。
view.wantsLayer = true
view.layer?.masksToBounds = false
Run Code Online (Sandbox Code Playgroud)
经过5个小时的挣扎,我才刚刚实现.只需将.storyboard或.xib中的任何NSView的类更改为NoClippingView,它就不会剪切任何子视图.
class NoClippingLayer: CALayer {
override var masksToBounds: Bool {
set {
}
get {
return false
}
}
}
class NoClippingView: OSView {
override var wantsDefaultClipping: Bool {
return false
}
override func awakeFromNib() {
super.awakeFromNib()
wantsLayer = true
layer = NoClippingLayer()
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我在NoClippingLayer中覆盖masksToBounds?因为一些本机AppKit类在运行时更改了所有子层的此属性而没有任何警告.例如,NSCollectionView为其单元格的视图执行此操作.
如果使用自动布局,则覆盖alignmentRectInsets以展开剪裁区域,使其大于对齐矩形.这个例子在所有方面都给出了50的空间:
override var alignmentRectInsets: NSEdgeInsets {
return NSEdgeInsets(top: 50.0, left: 50.0, bottom: 50.0, right: 50.0)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9721 次 |
| 最近记录: |