如何删除 Big Sur 上的 NSTableView 缩进

How to remove NSTableView indentation on Big Sur

Big Sur 添加了一种新的 属性 样式, 默认为自动。即使我将它设置为全宽,我仍然可以看到我的应用 运行 在 Xcode 12.1 和 12.2 上的区别 这是一个示例应用程序,其中有一个简单的单元格将其背景绘制为红色。

调试界面时,我可以看到边缘包含 table 行。这意味着单元格没有占据行的整个宽度。

如果有办法让单个单元格视图扩展整个 table 视图宽度,请告诉我。

这是示例应用程序:https://www.dropbox.com/s/zx4qqncllja1sox/test.zip?dl=0

.fullWidth 实际上包括行级别的水平填充。

您需要设置 tableView.style = .plain 才能恢复大苏尔之前的外观。

来自 NSTableView 头文件:

@available(macOS 11.0, *)
public enum Style : Int {       
    // Automatically infers the effectiveStyle from the table view hierarchy.
    case automatic = 0

    // Edge-to-edge style with standard content padding at the ends of each row. This content padding is constant and independent of intercellSpacing.
    case fullWidth = 1

    // Inset style with rounded corners selection
    case inset = 2

    /* The source list style of NSTableView. Setting this style will have the side effect of setting the background color to "source list".
     Additionally in NSOutlineView, the following properties may change to get the standard "source list" look: indentationPerLevel, rowHeight and intercellSpacing. After setting the style it is possible to change any of the other properties as required.
     In 10.11, if the background color has been changed from the "source list" background color to something else, the table will no longer draw the selection as a source list blur style, and instead will draw a normal selection highlight.
     This replaces NSTableViewSelectionHighlightStyleSourceList which is to be deprecated.
     */
    case sourceList = 3

    // A plain style. No insets, padding or any other kind of decoration applied to the row or its background. The cells are equally spaced in the row using intercellSpacing.width.
    case plain = 4
}

☝️ 一个有趣的观察。您可以在 Interface Builder 中设置普通样式,但 many people report 它不起作用。如果您在 Big Sur 上编译 not,它似乎不会被应用。在那种情况下,就像其他答案所建议的那样,在代码中指定样式就可以了:

if #available(macOS 11.0, *) {
    self.tableView.style = .plain
}