Как заставить MTKView внутри NSScrollView показывать полосы прокрутки - PullRequest
0 голосов
/ 03 июня 2019

Если я изменю размер окна, чтобы оно было меньше металлического вида, я могу видеть полосы прокрутки в течение секунды, но я не могу нажимать на них, и они остаются видимыми.Вы знаете, как я могу изменить это поведение?Я ожидаю, что полосы прокрутки будут видимыми и активными, если окно меньше металлического вида.

    nsview = gdk_quartz_window_get_nsview(window);

    NSScrollView *scroll_view = [[NSScrollView alloc]initWithFrame: [nsview frame]];
    [scroll_view setBorderType: NSNoBorder];
    [scroll_view setHasVerticalScroller: YES];
    [scroll_view setHasHorizontalScroller: YES];
    [scroll_view setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];

    [nsview addSubview: scroll_view];

    self->clip_view = [[DvFlippedClipView alloc]initWithFrame: [nsview frame]];
    [scroll_view setContentView: self->clip_view];

    self->mtk_view = [[MTKView alloc]initWithFrame: [nsview frame]
                                            device: self->device];

    self->mtk_view.framebufferOnly = YES;
    self->mtk_view.autoResizeDrawable = NO;

    self->mtk_view.translatesAutoresizingMaskIntoConstraints = NO;

    self->mtk_view_delegate = [[DvMetalViewDelegate alloc] init: self->mtk_view];
    self->mtk_view.delegate = self->mtk_view_delegate;

    [scroll_view setDocumentView: self->mtk_view];

Из другого обратного вызова я делаю следующее:

    [self->mtk_view setBounds:NSMakeRect(0, 0, width, height)];
    [self->mtk_view setFrame:NSMakeRect(0, 0, width, height)];
    self->mtk_view.drawableSize = CGSizeMake(width, height);

1 Ответ

0 голосов
/ 20 июня 2019

У меня вчера была похожая проблема, и я подозреваю, что странное поведение скроллера и отсутствие прокрутки в целом могут быть вызваны тем, что я подозреваю, что ваша проблема. Надеюсь, это по крайней мере просветит вас или кого-то еще, если вы еще не нашли ответ.

Моя иерархия представлений выглядит следующим образом:

enter image description here

Проблема заключалась в том, что я установил MTKView как свойство представления CenterTopViewController, а не как Borded Scroll View. Делая это, для всех практических целей и задач удалили MTKView из иерархии и установите его так, чтобы его свойство superview указывало на представление split, в котором все это находится. Представление прокрутки, казалось, не было частью цепочки респондента, и никогда не обрабатывало какие-либо события прокрутки (или, по крайней мере, никак).

Установка вида прокрутки как свойства вида контроллера представления исправила все.

P.S. Если вы не понимаете, почему над MTKView есть ненужное представление, это просто результат почти отчаянных попыток раскрыть проблему, прежде чем я ее выясню. Я еще не удосужился починить его.

...