如何更改NSTableHeaderCell的字体大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改NSTableHeaderCell的字体大小相关的知识,希望对你有一定的参考价值。

我试图在我的代码中更改我的NSTableView的字体大小,以允许用户根据自己的喜好进行更改。我通过更改每个NSTableCellView的字体大小来成功,但是没有通过标题单元格这样做。

我试图这样做

let headerCell = NSTableHeaderCell()
let font = NSFont(name: "Arial", size: 22.0)
headerCell.stringValue = "firstname"
headerCell.font = font
customerTable.tableColumns[0].headerCell = headerCell

标题单元格的stringValue将相应设置,但大小不会更改。如何更改标题的字体大小?

谢谢

奥利弗

答案

您可以创建NSTableHeaderCell子类并实现要更改的属性。

在Objective-C(我不擅长Swift):

@implementation CustomTableHeaderCell

-(NSFont *)font {
    return [NSFont fontWithName:@"Arial" size:22];
}

// you can alse custom textColor
-(NSColor *)textColor {
    return [NSColor redColor];
}

@end

分配CustomTableHeaderCell

CustomTableHeaderCell *headerCell = [[CustomTableHeaderCell alloc] init];
headerCell.stringValue = @"Header title";
self.tableView.tableColumns[0].headerCell = headerCell;

Screenshot

在Cocoa中,有很多东西你无法通过cell.font = ...改变它的风格,你需要创建一个subcalss。

另一答案

所以,最后我只能通过子类化NSTableHeaderCell来解决这个问题。这有些奇怪,因为Swift和Cocoa总是喜欢构图而不是继承,但无论如何。

Swift 3.1

final class CustomTableHeaderCell : NSTableHeaderCell {

    override init(textCell: String) {
        super.init(textCell: textCell)
        self.font = NSFont.boldSystemFont(ofSize: 18) // Or set NSFont to your choice
        self.backgroundColor = NSColor.white
    }

    required init(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
        // skip super.drawWithFrame(), since that is what draws borders
        self.drawInterior(withFrame: cellFrame, in: controlView)
    }

    override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
        let titleRect = self.titleRect(forBounds: cellFrame)
        self.attributedStringValue.draw(in: titleRect)
    }
}
另一答案

更改attributionStringValue将起到作用

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.tableColumns.forEach { (column) in

        column.headerCell.attributedStringValue = NSAttributedString(string: column.title, attributes: [NSFontAttributeName: NSFont.boldSystemFont(ofSize: 18)])

        // Optional: you can change title color also jsut by adding NSForegroundColorAttributeName
    }
}

https://i.stack.imgur.com/IXJyu.png

以上是关于如何更改NSTableHeaderCell的字体大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 macOS 10.12+ 上自定义 NSTableView 标头?

如何更改 ttk.Button 中的字体大小?

如何使用 PyQtgraph 更改绘图的刻度字体大小

无法在导航条中设置自定义大标题

Highcharts 图表中,如何设置标题字体及如何更改字体颜色

如何更改 FSCalendar 上的 Header View 标题字体并添加字幕?