如何为NSGridView中的单个单元格设置边框或背景图片
NSGridView 单个单元格添加边框、背景的解决方案
方案1:使用容器视图包裹内容(推荐)
这个方案不需要手动读取单元格的宽高参数,适配自动布局逻辑,实现成本最低:
- 优先选择
NSBox作为容器:直接将单元格原有内容添加到NSBox的contentView中,设置NSBox的fillColor(背景色)、borderType/borderColor(边框)、cornerRadius(圆角)等属性,再将这个NSBox设置为NSGridCell的contentView即可,系统会自动让NSBox适配单元格的实际布局尺寸。 - 如果需要自定义背景图或者更复杂的绘制效果,可以自定义
NSView子类作为容器,重写draw(_ rect: NSRect)方法实现自定义绘制逻辑,再将内容视图添加到容器视图上,四边约束贴边即可。
方案2:布局完成后读取单元格实际尺寸
如果确实需要单独获取单个单元格的布局后尺寸,不要直接读取NSGridRow/NSGridColumn的width、height属性,这些属性仅用于主动设置布局参数,不会返回实际渲染的尺寸:
- 需要在
NSGridView完成自动布局后(比如重写gridView的layout()方法,或者在父视图的viewDidLayout()回调中),调用单元格的frame(in:)方法获取实际坐标尺寸,参考代码:
// gridView为当前单元格所属的NSGridView实例 let realCellFrame = targetGridCell.frame(in: gridView)
注意不要在视图加载早期(如
viewDidLoad阶段)调用尺寸读取接口,此时自动布局还未完成,拿到的数值都是无效的0值。
内容的提问来源于stack exchange,提问作者Bradley Ross
相关产品推荐
相关产品推荐

