Это должно быть очень просто, но после часа или около того я не могу понять, как это сделать правильно:
У меня есть представление 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];
}
Проблема в том, что функция вызывается несколько раз, когда скроллер исчезает, а столбец увеличивается и сжимается несколько раз по какой-то причине, что довольно уродливо. Кроме того, когда окно теряет фокус, левый столбец увеличивается до нормального размера, в результате чего скроллер снова закрывает правый столбец.