这应该是非常基本的,但是在尝试了一个小时左右之后,我无法弄清楚如何正确地做到这一点:
我有一个包含两列的 NSOutline 视图,其中右侧应该始终完全可见。封闭的 NSScrollView 设置为仅显示垂直滚动条。现在,每当垂直滚动条出现时,它都会覆盖右列的一部分。然而,我想要实现的是右栏向左移动,以便它仍然完全可见。
我首先尝试摆弄 IB 中的调整大小选项一段时间,但这似乎没有奏效。
然后我创建了一个自定义的 NSOutlineView
-(void)viewWillDraw {
CGRect contentFrame = [[[self enclosingScrollView] contentView] frame];
CGRect ourFrame = self.frame;
CGFloat correction = ourFrame.size.width - contentFrame.size.width;
//resize the first column when the scrollbar appears
[[self outlineTableColumn] setWidth:kOutlineColumnWidth - correction];
[super viewWillDraw];
}
问题是,当滚动条消失并且列由于某种非常难看的原因而增长和收缩几次时,该函数会被调用多次。此外,当窗口失去焦点时,左列会恢复到正常大小,导致右列再次被滚动条覆盖。