NSScrollView 总是出现在其他视图之上
NSScrollView always appears on top of other views
无论如何,我的 NSScrollViews 似乎总是出现在任何其他视图的顶部,即使其他视图是最近添加的并且应该出现在顶部。
我该怎么做才能让另一个视图(比如普通的 NSView)显示在 NSScrollView 上方?
因此请检查您的 xib,并确保您的滚动视图位于视图层次结构的最顶端 ("Document Outline")。然而,加载时这并不一定 100% 保证首先绘制滚动视图。一种手动强制按照您希望的视图顺序排列的方法是根据标签以编程方式移动它们。
在 Interface Builder 的属性检查器中,转到底部并找到 "View" 部分。向视图添加标签,0 是您想要的最底部视图,并从那里向上。
然后在您的控制器中,添加此方法定义和对它的调用:
NSComparisonResult compareViews(id firstView, id secondView, void *context) {
NSInteger firstTag = [firstView tag];
NSInteger secondTag = [secondView tag];
if (firstTag == secondTag) {
return NSOrderedSame;
} else {
if (firstTag < secondTag) {
return NSOrderedAscending;
} else {
return NSOrderedDescending;
}
}
}
[self.view sortSubviewsUsingFunction:(NSComparisonResult (*)(id, id, void*))compareViews context:nil];
这将确保您的观点按您希望的正确顺序排列
我最终通过在 NSScrollView、NSScrollView 的内容视图和外部视图上将 setWantsLayer
设置为 YES
(在本例中为 true
,因为我使用的是 RubyMotion)解决了这个问题我想出现在 NSScrollView 上方。
这解决了我的问题并允许其他视图显示在 NSScrollView 上方。
无论如何,我的 NSScrollViews 似乎总是出现在任何其他视图的顶部,即使其他视图是最近添加的并且应该出现在顶部。
我该怎么做才能让另一个视图(比如普通的 NSView)显示在 NSScrollView 上方?
因此请检查您的 xib,并确保您的滚动视图位于视图层次结构的最顶端 ("Document Outline")。然而,加载时这并不一定 100% 保证首先绘制滚动视图。一种手动强制按照您希望的视图顺序排列的方法是根据标签以编程方式移动它们。
在 Interface Builder 的属性检查器中,转到底部并找到 "View" 部分。向视图添加标签,0 是您想要的最底部视图,并从那里向上。
然后在您的控制器中,添加此方法定义和对它的调用:
NSComparisonResult compareViews(id firstView, id secondView, void *context) {
NSInteger firstTag = [firstView tag];
NSInteger secondTag = [secondView tag];
if (firstTag == secondTag) {
return NSOrderedSame;
} else {
if (firstTag < secondTag) {
return NSOrderedAscending;
} else {
return NSOrderedDescending;
}
}
}
[self.view sortSubviewsUsingFunction:(NSComparisonResult (*)(id, id, void*))compareViews context:nil];
这将确保您的观点按您希望的正确顺序排列
我最终通过在 NSScrollView、NSScrollView 的内容视图和外部视图上将 setWantsLayer
设置为 YES
(在本例中为 true
,因为我使用的是 RubyMotion)解决了这个问题我想出现在 NSScrollView 上方。
这解决了我的问题并允许其他视图显示在 NSScrollView 上方。