如何使NSScrollView中的MTKView显示滚动条

时间:2019-06-03 12:56:12

标签: cocoa metal nsscrollview

如果我将窗口的大小调整为小于金属视图,则可以看到滚动条一秒钟,但是我无法单击它们,也无法看到它们。您知道我可以如何改变这种行为吗?我希望只要窗口小于金属视图,滚动条就可以显示和单击。

    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 :(得分:0)

昨天我遇到了类似的问题,我怀疑奇怪的滚动行为和完全缺乏滚动的原因可能是我怀疑您的问题所在。如果您还没有找到答案,希望它至少能启发您或其他人。

我的视图层次结构如下:

enter image description here

问题是我已将MTKView设置为CenterTopViewController的view属性,而不是Bordered Scroll View。为此,出于所有实际意图和目的,从层次结构中删除了MTKView并将其设置为使其superview属性指向所有这些都驻留在其中的拆分视图。滚动视图似乎并不属于响应者链,并且从未处理过任何滚动事件(或至少没有以任何有意义的方式)。

将滚动视图设置为视图控制器的view属性可修复所有问题。

P.S。 如果您对为什么在MTKView上方为什么有不必要的视图感到困惑,那只是由于在我弄清楚之前几乎拼命地试图发现问题的结果。我还没有解决它。