如何在NSTableCellView中对齐对象

时间:2019-03-16 11:24:06

标签: swift xcode

我尝试将NSPopUpButton垂直放置在表格单元的顶部,但没有成功。它保持垂直居中:

Picture of table with "misaligned" popups

返回NSPopUpButtons的代码:

extension ViewController:NSTableViewDataSource, NSTableViewDelegate{


func tableViewColumnDidResize(_ notification: Notification) {…}


func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {…}


func numberOfRows(in tableView: NSTableView) -> Int {
    return tableViewData.count
}

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{

    if tableColumn?.identifier.rawValue == "value" {

        …

    } else if (tableColumn?.identifier.rawValue == "type") {

        let typePopUp = NSPopUpButton()

        typePopUp.addItems(withTitles:["Data", "String", "Number", "Boolean"])
        typePopUp.isBordered = false

        return typePopUp

    } else {…}
}

}

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我建议您将该列的表单元格子类化,将按钮嵌入到NSView中,然后向该子类添加“ customizeCell”函数。 从委托调用该函数时,它可以找到表格行的实际行高,并相应地调整视图的大小,并使用自动布局相对于视图放置按钮。

此外,尽管我认为这不是造成您的问题的原因,但除非您为简洁起见而将其排除在问题之外,否则您不会使用“ makeView”。

通常

func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{

从以下位置获取其单元格:

let vw = tableView.makeView(withIdentifier: tableColumn!.identifier, owner: self)

Cocoa从笔尖构建单元格,并将其排队以供重用(这可能仅在表很长的情况下才重要)

希望我在这里。