2017-02-08 17 views
0

我想实现一个NSTableView我自己列大小调整方案。我得到这个主要工作,但与垂直滚动条的动态外观斗争。定制columnAutoresizingStyle与NSTableView的

想象我想有一个表有两列,其中第一始终占据1/3,其他的可视空间的剩余2/3。

我已经尝试通过在NSTableView一个子类实现tile方法如下做到这一点:

- (void)tile 
{ 
    NSClipView *container = (NSClipView*) self.superview; 

    NSSize spacing = self.intercellSpacing; 
    CGFloat avail = container.frame.size.width; 
    CGFloat cw0 = (int) (avail/3); 
    CGFloat cw1 = avail - cw0; 
    self.tableColumns[0].width = cw0 - spacing.width; 
    self.tableColumns[1].width = cw1 - spacing.width; 

    [super tile]; 
} 

我相信我有调用[super tile]有滚动条得到补充是必要的。

但问题是,当我调整窗口大小(并因此调整了TableView的大小)时,水平滚动条有时是剪辑视图的一部分,有时不是,导致闪烁。

下面举例说明调整窗口大小时,我得到:

好的结果:

good resize example

坏的结果(请注意一个事实,即有一个水平滚动条):

bad resize example

当我不断调整窗口的大小时,表视图不断添加和删除水平滚动条,因此闪烁。这是我想要避免的。

我不知道原来tile功能如何处理这一点。我将如何启用它,以便我不会闪烁,但是会根据需要显示滚动条?

+0

覆盖' - [NSTableView] sizeLastColumnToFit'? – Willeke

回答

0

原来的解决方案是很容易:

我应该提到,我已经设置了tableview中的columnAutoresizingStyleNSTableViewNoColumnAutoresizing - 因为我要管理自己的尺寸调整,因此我认为我不得不转了AppKit的处理关闭。

但是不行 - 我应该把它设置为NSTableViewLastColumnOnlyAutoresizingStyle,然后将其按预期工作。

我也感动[super tile];到函数的顶部。