Objective c NSTableHeaderView调整大小使表行下移

Objective c NSTableHeaderView调整大小使表行下移,objective-c,macos,nsscrollview,nstableheaderview,Objective C,Macos,Nsscrollview,Nstableheaderview,我已经创建了NSScrollView的一个子类,它被设置为IB中带有表视图的滚动视图类。我增加了表的标题视图的高度,并添加了一个标签作为表视图的标题。问题是表行从列标题开始,其数量等于我使标题视图更高的数量,因此列标题出现在新的更高页眉视图的中间。 我尝试过更改表格的原点或大小、表格的剪辑视图、标题视图及其剪辑视图-除了标题视图的大小之外,所有这些都不会更改任何内容。这是我用来创建自定义标题视图的代码: -(void)awakeFromNib { //self is a subclass

我已经创建了NSScrollView的一个子类,它被设置为IB中带有表视图的滚动视图类。我增加了表的标题视图的高度,并添加了一个标签作为表视图的标题。问题是表行从列标题开始,其数量等于我使标题视图更高的数量,因此列标题出现在新的更高页眉视图的中间。

我尝试过更改表格的原点或大小、表格的剪辑视图、标题视图及其剪辑视图-除了标题视图的大小之外,所有这些都不会更改任何内容。这是我用来创建自定义标题视图的代码:

-(void)awakeFromNib {
    //self is a subclass of NSScrollView enclosing an NSTableView
    NSClipView *tableClip = [self.subviews objectAtIndex:0];
    NSClipView *headerClip = [self.subviews objectAtIndex:3];
    NSTableHeaderView *header = [[[self.subviews objectAtIndex:3] subviews]lastObject];
    NSTableView *table = [[[self.subviews objectAtIndex:0] subviews]lastObject];
    NSLog(@"%@  %@  %@  %@",tableClip,headerClip,header,table);

    [header setFrameSize:NSMakeSize(header.frame.size.width, header.frame.size.height+60)];//HeaderView Frame
    NSTextField *titleLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 5, header.frame.size.width,22)];
    titleLabel.selectable = NO;
    titleLabel.font = [NSFont systemFontOfSize:16];
    titleLabel.alignment = NSCenterTextAlignment;
    titleLabel.bordered = NO;
    titleLabel.stringValue = @"This is my title";
    [header addSubview:titleLabel];
}

你想在这里干什么?既然NSScrollView中已经有了NSTableView,为什么不使用NSTextView或NSTextField将标题放在NSTableView之上,然后不使用NSTableView的标题呢?另外,首先为什么要对NSScrollView进行子类化,看起来您可以在XIB中通过在NSScrollView中嵌入顶部标签和表格来完成大部分工作。@gaige我这样做是为了获得更完整的外观。当您选择表格时,焦点环将环绕整个内容,包括标题,如果您在表格上方添加标题,则不会这样做。至于在IB中这样做,我不知道有什么方法可以做到这一点,它的标题不是滚动,如果在滚动视图中嵌入一个表和标签,就会发生这种情况。我误解了你上面关于将NSScrollView子类化的评论,self是NSScrollView的子类,包含一个NSTableView。您可能会看到子类化NSTableHeaderView,尽管我不确定这其中涉及到什么,但根据经验,google搜索表明这是可能的。请注意:这是非常脆弱的代码。您不应该按索引号引用子视图,当然也不应该假定在将来的版本中顺序相同。创建/设置属性并在xib中绑定它们,或者根据需要以编程方式绑定它们。利用NSView上的enclosingScrollView、NSTableView上的headerView、NSScrollView中的contentView等属性获取剪辑视图,以及其他类似属性。