使用NSTableView自定义columnAutoresizingStyle

时间:2017-02-08 21:52:48

标签: nstableview appkit

我喜欢在npm install中实现自己的列调整大小方案。我得到了这个主要工作,但与垂直滚动条的动态外观斗争。

想象一下,我希望有一个包含两列的表格,其中第一列总是占据1/3,另一列则占据可见空间的剩余2/3。

我已尝试通过在NSTableView的子类中实现tile方法来实现此目的,如下所示:

NSTableView

我相信我必须调用- (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]; } 以根据需要添加滚动条。

然而,问题在于,当我调整窗口大小(从而也调整TableView的大小)时,水平滚动条有时是剪辑视图的一部分,有时不会导致闪烁。

以下是调整窗口大小时的示例:

结果很好:

good resize example

糟糕的结果(注意事实是有一个水平滚动条):

bad resize example

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

我想知道原始[super tile]函数如何处理这个问题。我如何启用它以便我不会出现闪烁,但是根据需要显示滚动条?

1 个答案:

答案 0 :(得分:0)

原来解决方案非常简单:

我应该提到我已将tableview的columnAutoresizingStyle设置为NSTableViewNoColumnAutoresizing - 因为我想管理自己的调整大小,因此我认为我必须转换Appkit& #39;正在处理。

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

我还将[super tile];移到了函数的顶部。