【问题标题】:Custom columnAutoresizingStyle with NSTableView使用 NSTableView 自定义 columnAutoresizingStyle
【发布时间】:2017-02-08 21:52:47
【问题描述】:

我喜欢在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 大小)时,水平滚动条有时是剪辑视图的一部分,有时不是,导致闪烁。

以下是我在调整窗口大小时得到的示例:

好结果:

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

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

我想知道原来的tile 函数是如何处理这个问题的。我将如何启用它,这样我就不会闪烁,但滚动条会根据需要出现?

【问题讨论】:

  • 覆盖-[NSTableView ]sizeLastColumnToFit?

标签: nstableview appkit


【解决方案1】:

原来解决方案很简单:

我应该提到我已将 tableview 的 columnAutoresizingStyle 设置为 NSTableViewNoColumnAutoresizing - 因为我想管理自己的大小调整,因此我认为我必须关闭 Appkit 的处理。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2014-11-12
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多