2017-02-08 13 views
0

Мне нравится реализовать мою собственную схему изменения размера столбца в NSTableView. У меня это в основном работает, но борьба с динамическим появлением вертикальной полосы прокрутки.Custom columnAutoresizingStyle с NSTableView

Представьте, что я хочу иметь таблицу с двумя столбцами, в которой первое всегда занимает 1/3, а второе - оставшееся 2/3 видимого пространства.

Я пытался сделать это путем внедрения метода tile в подклассе NSTableView следующим образом:

- (void)tile 
{ 
    NSClipView *container = (NSClipView*) self.superview; 

    NSSize spacing = self.intercellSpacing; 
    CGFloat avail = container.frame.size.width; 
    CGFloat cw0 = (int) (avail/3); 
    CGFloat cw1 = avail - cw0; 
    self.tableColumns[0].width = cw0 - spacing.width; 
    self.tableColumns[1].width = cw1 - spacing.width; 

    [super tile]; 
} 

Я считаю, что я должен вызвать [super tile], чтобы иметь полосы прокрутки добавляются по мере необходимости.

Проблема заключается, однако, в том, что при изменении размера окна (и, тем самым, изменении размера TableView) горизонтальная полоса прокрутки иногда является частью изображения клипа, а иногда и нет, что приводит к мерцанию.

Вот примеры, которые я получаю при изменении размера окна:

Хороший результат:

good resize example

Плохой результат (обратите внимание на тот факт, что есть горизонтальная полоса прокрутки):

bad resize example

Пока я изменяю размер окна, вид таблицы продолжает добавлять и удалять горизонтальная полоса прокрутки, таким образом мерцающая. Этого я хочу избежать.

Интересно, как это работает с исходной функцией tile. Как я могу включить его, чтобы не получить мерцание, но при необходимости появятся полосы прокрутки?

+0

Override '- [NSTableView] sizeLastColumnToFit'? – Willeke

ответ

0

Оказывается, решение было довольно легко:

Я должен отметить, что я установить TableView-х columnAutoresizingStyle к NSTableViewNoColumnAutoresizing - потому что я хотел управлять своим собственным изменение размеров, поэтому я предположил, что я должен был бы включить обработку AppKit в выкл.

Но нет - я должен установить его на NSTableViewLastColumnOnlyAutoresizingStyle, а затем он работает по назначению.

Я также переехал [super tile]; в начало функции.

 Смежные вопросы

  • Нет связанных вопросов^_^