无法响应 outlineViewItemDidExpand 更改列宽

Can't change column width in response to outlineViewItemDidExpand

每当 NSOutlineView 中的节点展开时,我想将列宽更新为最宽条目的宽度。因此,我的代表听 outlineViewItemDidExpand 并调用

[column setWidth:maxColumnWidth];

在里面。 maxColumnWidth是最宽条目的宽度。

然而,出于某种原因,从 outlineViewItemDidExpand 内部调用 setWidth 似乎没有任何作用。当我稍后调用它时,例如作为对按钮点击的响应,它工作得很好,但从 outlineViewItemDidExpand 内部它什么都不做。

所以知道每当用户单击扩展器图标时我可以做什么来更新列宽吗?非常感谢!

我能够通过在 outlineViewItemDidExpand 中从 performSelector() 调用的选择器调用 setWidth() 来解决这个问题,就像这样:

-(void) setColumnWidth
{
    [theColumn setWidth:...];
}

-(void) outlineViewItemDidExpand:(NSNotification*)notification
{     
    // calling setWidth() here doesn't work
    // [theColumn setWidth:...];
    
    // but calling setWidth() from a selector works!
    [self performSelector:@selector(setColumnWidth) withObject:nil afterDelay:0.0];
}

别问我为什么调用 setWidth() 只能在选择器中起作用,但它确实起作用...

如果 autoresizesOutlineColumnYES(默认),则大纲视图会在 outlineViewItemDidExpand 之后调整大纲列的大小。解决方法:将autoresizesOutlineColumn设置为NO.