NSTableView - 试图恰好适合9行

时间:2011-03-02 07:05:07

标签: objective-c nstableview

我正在尝试将NSTableView的行调整为恰好适合9行。我已经尝试了[menuTableView setRowHeight:floor(menuRect.size.height / 9)];并且我尝试了[menuTableView setRowHeight:(menuRect.size.height / 9)];[menuTableView setRowHeight:ceil(menuRect.size.height / 9)];但是所有这些都有相同的问题,如果我选择了第0行,那么第9行会被剪切在底部如果我选择第9行,那么第0行将被剪切在顶部。

如何设置NSTableView以显示9个完整行,所以无论什么都没有可见的部分行?

谢谢,

编辑:是menuRect是menuTableView的框架

修改

下面是我用来定位NSTableView的完整方法,并设置行高度我尝试使用rowHeight变量删除任何舍入问题。您可以通过附加的屏幕截图看到最后一行未完全显示

- (void) updateGUIPositions
{
    NSRect screenRect = [self frame];
    NSRect menuRect;

    // Set the menu location on screen
    NSInteger spacer =  screenRect.size.width / 9;
    menuRect.size.width = floor(screenRect.size.width - (spacer * 3)) / 2;
    menuRect.size.height = ceil(screenRect.size.height - (spacer * 2));
    NSInteger rowHeight = menuRect.size.height / 9;
    menuRect.size.height = rowHeight * 9;
    menuRect.origin.x = menuRect.size.width + (spacer * 2);
    menuRect.origin.y = spacer;
    [menuScrollView setFrame:menuRect];

    // Setup the row height
    [menuTableView setRowHeight:rowHeight];
}

enter image description here

2 个答案:

答案 0 :(得分:1)

我不确定这是否有效,但听起来像是一个舍入错误(我对UITableView有同样的问题)。尝试将NSTableView的帧的高度增大1px。所以,menuTableView.frame.height = menuTableView.frame.height+1;

EDIT 试试这个......

`float rowHeight = menuRect.size.height / 9.0f;`

答案 1 :(得分:0)

如果您可以修改行的大小,而是以编程方式设置框架的大小,则此related question表明此公式有效:

numRows * (rowHeight + intercellSpacing.height)

使用该公式,滚动条将绘制,但您可以将其关闭。