Objective c 如何增加NSTableHeaderView的高度?
我需要实现一个具有特定大小和渐变的Objective c 如何增加NSTableHeaderView的高度?,objective-c,macos,cocoa,nstableview,nstableheaderview,Objective C,Macos,Cocoa,Nstableview,Nstableheaderview,我需要实现一个具有特定大小和渐变的headerview。我必须在headerview的某些单元格中插入图像。尝试使用以下代码为headerview创建单元格,但无法自定义headerview [[tableColumn headerCell]setImage:[NSImage ImageName:@“sampleHeader”] 如果我使用headerview的重写子类,则无法查看标题单元格中的图像或文本。请提供解决此问题的任何指针 我能够通过子类化NSTableHeaderCell插入图像和文
headerview
。我必须在headerview
的某些单元格中插入图像。尝试使用以下代码为headerview
创建单元格,但无法自定义headerview
[[tableColumn headerCell]setImage:[NSImage ImageName:@“sampleHeader”]代码>
如果我使用headerview的重写子类,则无法查看标题单元格中的图像或文本。请提供解决此问题的任何指针
我能够通过子类化NSTableHeaderCell
插入图像和文本。如何增加NSTableHeaderView
的高度
如果我同时将NSTableHeaderView
和NSTableHeaderCell
子类化,则无法查看
我使用以下代码设置headerview和headercell
[tableView setHeaderView:CustomHeaderView]代码>
[tableColumn setHeaderCell:[[[CustomHeaderTableCell alloc]initImageCell:
[NSImage IMAGENAME:@“样本”]]自动释放]]代码>
我有相同的问题,在下面的网址给出
以下链接帮助我解决了这个问题
您需要为NSClipView
、NSTableHeaderView
和CornerView
这就是我在代码中实现相同功能的方式
for(NSView * subview in [topScrollView subviews])
{
for(NSView * subSubView in [subview subviews])
{
if([[subSubView className] isEqualToString:@"NSTableHeaderView"] && [[subview className] isEqualToString:@"NSClipView"])
{
[subSubView setFrameSize:NSMakeSize(subSubView.frame.size.width, subSubView.frame.size.height+5)];//HeaderView Frame
[subview setFrameSize:NSMakeSize(subview.frame.size.width, subview.frame.size.height+5)];//ClipView Frame
}
}
if ([[subview className] isEqualToString:@"_NSCornerView"])
{
[subview setFrameSize:NSMakeSize(subview.frame.size.width, subview.frame.size.height+5)]; //CornerView Frame
}
}
您不需要为NSTableHeaderView创建子类
我能够在控制器类中使用以下代码段更改标题视图的高度:
-(void)awakeFromNib {
NSRect frame = tableView.headerView.frame;
frame.size.height = 26;
tableView.headerView.frame = frame;
}
应该注意的是,滚动视图负责布局。它会根据需要自动更改headerView的框架,但保持高度不变。没有必要按照另一个答案中的建议调整剪辑视图等的大小。您还可以创建一个NSTableHeaderView
对象,用一个框架(带高度和宽度的rect)初始化它,并将该NSTableHeaderView
对象设置为您的表视图
NSTableHeaderView *tableHeaderView = [[NSTableHeaderView alloc] initWithFrame:NSMakeRect(0, 0, 120, 60)];
[myTableView setHeaderView:tableHeaderView];
[tableHeaderView release];
这并不能完全解决这个问题。在这段代码之后,我可以看到NSTableHeaderView确实变得更高了——但是列标题单元格是按原始标准高度绘制的,在它们上面留下了一个空白的表宽条。所以,布局是自动的并不完全正确。也许您需要告诉其他人根据新的TableHeaderView大小重新布局列标题单元格。布局是自动的,但问题是NSTableHeaderCell以固定高度绘制其背景。您需要将其子类化并重写-drawWithFrame:inView:
。最简单的实现是绘制一个渐变作为背景,然后调用-drawInteriorWithFrame:inView:
,但问题不仅仅在于背景!如果我在那里放置更多文本,并将单元格(NSTableHeaderCell)配置为换行文本,则不会换行。相反,我只看到第一行的开头。我担心细胞没有得到正确的(更高的)框架,以吸引自己。否则---为什么它不能正确绘制文本?NSTableHeaderCell不能绘制包装文本。您需要对其进行子类化并覆盖-drawWithFrame:inView:
。这对我来说并不可靠,直到我使用[tableView tile]
之后才开始使用。我不确定2011年appkit中提供了哪些属性,但现在您肯定不需要双for循环来获取表头视图,或者clipview或cornerview。。。