2016-02-26 29 views
0

标题应为:根据NSTableCellView的NSTextField内容内在内容大小自动调整基于NSTableView的视图的包含NSWindow的宽度。根据内容自动调整基于NSTableView的视图的宽度

有点像this other question,我想实现一个自动完成的NSWindow,里面有一个NSTableView,它调整NSTableCellView中NSTextField实现的可用自动补全长度的宽度。每个自动完成显然应显示在一条线上...

上一个问题已被回答,但仅与NSTableView的高度有关。我想知道如何做宽度“相同”。我想尽可能使用自动布局来实施解决方案。

我试着将参与NSWindow最终显示的每个视图元素的水平“内容拥抱优先级”和“内容压缩抵抗优先级”设置为最大值1000。我认为NSTextField的内在内容大小会强制所有其他元素进行调整,但不起作用。

设置NSTableColumn宽度不起作用,因为NSScrollView的NSClipView没有被这个宽度修改:NSScrollView调整并创建水平滚动条来覆盖整个“文档”。

这里是一个链接到一个示例项目来演示该问题:

sample project

任何帮助将不胜感激!

回答

0

我使用这段代码解决了这个问题,scrollViewWidthConstraint是NSScrollView宽度约束的IBOutlet,localTableView是NSTableView的IBOutlet,tableColumn是NSTableColumn的IBOutlet(在我的例子中是唯一的)。

注意:GitHub上的链接项目已更新。

override func viewDidLoad() { 

    super.viewDidLoad() 

    self.updateTable() 
} 

func updateTable() { 

    localTableView.reloadData() 

    var computedWidth: CGFloat = 0 

    for var row = 0; row < 10; row++ { 

     let tableCellView = self.tableView(localTableView, viewForTableColumn: tableColumn, row: row) as! NSTableCellView 

     computedWidth = max(computedWidth, tableCellView.textField!.intrinsicContentSize.width) 
    } 

    scrollViewWidthConstraint!.constant = computedWidth 

    scrollView.needsUpdateConstraints = true 
} 
相关问题