How to increase the height of NSTableHeaderView?

2019-03-11 12:46发布

问题:

I need to implement a headerview with specific size and gradient. I have to insert images in certain cells of the headerview.Tried to create the cells for the headerview using the following code,but i was not able to customize the headerview.

[[tableColumn headerCell] setImage:[NSImage imageNamed:@"sampleHeader"]];

If I use the overridden subclass of headerview, I was not able to view the images or text in the header cell.Please provide me any pointers to solve this issue.

 

I was able to insert images and text by subclassing the NSTableHeaderCell.How to increase height of the NSTableHeaderView?


If I subclass both NSTableHeaderView and NSTableHeaderCell , was not able to view anything in the headercell.I used the following code for setting headerview and headercell

[tableView setHeaderView:CustomHeaderView];

[tableColumn setHeaderCell:[[[CustomHeaderTableCell alloc] initImageCell: [NSImage imageNamed:@"sample"]]autorelease]];

I have the same issue as given in the below url

http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg00331.html

回答1:

You don't need to subclass NSTableHeaderView.

I was able to change the height of the header view using the following snippet in the controller class:

-(void)awakeFromNib {
    NSRect frame = tableView.headerView.frame;
    frame.size.height = 26;
    tableView.headerView.frame = frame;
}

It should be noted that the scroll view takes care of the layout. It automatically changes the frame of the headerView as necessary, but leaves the height intact. Resizing the clip view etc as suggested in the other answer is not necessary.



回答2:

Following link helped me in solving the issue.

http://lists.apple.com/archives/cocoa-dev/2003/Feb/msg00676.html

You need to set the Frame for NSClipView, NSTableHeaderView and the CornerView This is how I implemented the same in Code.

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
    }
}


回答3:

You can also create a NSTableHeaderView object, initialize it with a frame(rect with height and width) and set that NSTableHeaderView object to your table view.

 NSTableHeaderView *tableHeaderView = [[NSTableHeaderView alloc] initWithFrame:NSMakeRect(0, 0, 120, 60)];
    [myTableView setHeaderView:tableHeaderView];
[tableHeaderView release];