【问题标题】:NSView overlappingNSView 重叠
【发布时间】:2018-04-24 09:46:17
【问题描述】:

我的可可应用有一个“仪表板”风格的布局。 当应用程序启动时,主窗口包含 6 个显示图形的视图。 当我点击最底部视图的任何部分时,我会弹出另一个 NSView 实例 作为注解。我遇到的问题是弹出的 NSView 尺寸足够大, 窗口中的其他视图与弹出视图重叠。目前,我这样做: [[自超视图] addSubview:annotationView ];其中“superview”是窗口。 我不确定为什么会这样,我尝试从“视图堆栈”中删除弹出视图 并让它改变位置,但这没有用。

【问题讨论】:

    标签: cocoa macos nsview


    【解决方案1】:
    [[[self window] contentView] insertView:popupView atIndex:0];
    

    这将在顶层插入视图,如果您仍然看不到它,则需要在 NSWindow 的 contentview 的父视图中添加一个子视图。

    【讨论】:

    • 尝试 - (void)addSubview:(NSView *)aView 定位:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView 代替
    • 我试过那行代码,它说没有找到 insertView atIndex 方法。我用下面的代码尝试了你建议的第二种方法
    • 对不起,insertView 是 UIView 的东西,类太像了,没想到 NSView 没有
    • 我尝试添加那行代码,但编译器说没有找到 insertView atInde 方法。我尝试了第二种方法,您在以下代码中指出 [[self window] contentView] insertView:popupView atIndex:0];但即使编译正常,仍然没有运气。
    • 使用 - (void)addSubview:(NSView *)aView 定位:(NSWindowOrderingMode)place relativeTo:(NSView *)otherView 代替,它是 NSView 等价于 insertView:atIndex:
    【解决方案2】:

    如果所有视图都作为[self superview] 的子视图添加,那么您必须确保它们不重叠。如果存在重叠的兄弟视图,Cocoa 不保证正确的行为。

    如果您想要弹出视图,请考虑使用子窗口。由于它是一个不同的窗口,弹出窗口位于不同的视图层次结构中,因此您不会遇到重叠兄弟视图的问题。

    使用子窗口获取更多信息的一个很好的例子是Matt Gemmell’s MAAttachedWindow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多