【问题标题】:Fixed Height NSTableView, Avoid Scrolling固定高度 NSTableView,避免滚动
【发布时间】:2011-01-23 12:10:50
【问题描述】:

我有一个NSTableView,它的固定行数非常少。

当我在 Interface Builder 中创建 NSTableView 时,NSTableView 包含在 NSScrollView 中。我还没有找到使表格存在于滚动视图上下文之外的方法。由于该表只有少量行,我不希望它滚动。我希望表格根据行数调整大小,并且我希望底部边框紧挨最后一行的底部。

如果我如下设置滚动视图的高度,我会得到一个垂直滚动条:

height = (numRows * (rowHeight + intercellSpacingHeight))

如果我在该高度上添加一个像素,我不会看到滚动条,但我会在最后一行的底部和底部边框之间获得一个额外的像素。

如果我在 Interface Builder 中取消选中 “显示垂直滚动条” 复选框,滚动条不会出现,但当我选择最后一行时表格会向下滚动一个像素。

有没有办法让表格完全不滚动,并且底部边框紧挨最后一行?

谢谢。

【问题讨论】:

    标签: cocoa macos nstableview


    【解决方案1】:

    您始终可以从其封闭的滚动视图中提取 NSTableView(在代码中或在 IB 中)...您可以将表格嵌入到您希望的任何容器中,但由您决定在容器内保持表格的大小(和/或扩大/缩小容器作为响应,具体取决于您想要做什么)。

    【讨论】:

    • 谢谢,约书亚。我想我不明白的是如何从 NSScrollView 中提取 NSTableView。 IB 把它放在那里,我看不到在不删除表格视图的情况下删除滚动视图的方法。也许我错过了一些明显的东西?谢谢!
    • @JoshuaNozzi - 太棒了,不知道,正在寻找。选择滚动视图,然后选择 Editor -> Unembed。非常感谢。
    • Editor -> 当我在 Xcode 8 的 IB 中选择滚动视图时,Unembed 对我被禁用。
    • 如果再单击一次以选择滚动视图中的表格视图会发生什么?
    【解决方案2】:

    awakeFromNib 中,您可以编写类似(未经测试)的内容:

    NSScrollView *scrollView = [tableView superview];
    NSView *container = [scrollView superview];
    [[tableView retain] autorelease];
    [tableView removeFromSuperview];
    [scrollView removeFromSuperview];
    [container addSubview:tableView];
    [container setFrameSize:[tableView frame].size];
    

    或者,在 Interface Builder 中,您可以通过更改为列表视图模式(主菜单 -> 视图 -> 作为列表)从滚动视图中提取表格视图。然后展开视图层次结构,直到看到表格视图。您可以将其拖出滚动视图,但不能拖到另一个视图中。您可以将其连接到插座并以编程方式将其添加到视图中。

    当行数发生变化时,您仍然需要更新容器的高度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 2018-02-03
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多