我有一个很大的问题,我真的无法解决自己。
结果应如下所示:
这张图片是用photoshop制作的,是我尝试构建的界面的一部分。
在中间你会看到一些东西,应该是一个项目列表,你应该能够滚动,如果它的列表比视图大。
所以我正在制作这样的滚动视图:(由于某种原因,我无法在界面构建器中执行此操作并希望以编程方式工作)
NSScrollView *projectsListView = [[NSScrollView alloc] initWithFrame:NSMakeRect(15, 2, 801, 588)];
[projectsListView setHasVerticalScroller:YES];
然后我创建内容视图并将图案图像设置为backgroundcolor:
NSClipView *contentView = [[NSClipView alloc] initWithFrame:NSMakeRect(0, 0,
[projectsListView frame].size.width, [projectsListView frame].size.height+(98*2))];
[contentView setBackgroundColor:[NSColor colorWithPatternImage:[NSImage imageNamed:@"BoxLineBackground"]]];
[contentView setDrawsBackground:YES];
然后将视图设置为文档视图:
[projectsListView setDocumentView:contentView];
应该工作吧? 但是,内容视图会被剪裁,滚动时看起来像这样:
我试过这个来修复它,但它没有做任何事情:
[[projectsListView documentView] setCopiesOnScroll:NO];
我也尝试了这个,但它导致内容视图根本不滚动。 图像保持不变,但我可以正常移动滚动条。
[[projectsListView contentView] setCopiesOnScroll:NO];
如果我尝试使用setContentView设置contentview:而不是使用setDocumentView: 它可能会工作,但滚动条消失了,所以它也无法正常工作。
我真的很想使用patternimage方法,因为我无法判断列表的长度。这取决于用户。
然后另一个问题是将整个事情四舍五入,但这并不重要。我尝试使用透明边框图像并使用NSImageView将NSScrollView与它叠加在一起,但这又会导致损坏,因为它会剪切并移动图像视图的重叠部分以及滚动视图的内容。
任何有想法的人,如何实现这个目标?
由于
答案 0 :(得分:1)
这个界面应该使用基于视图的NSTableView
来实现,而不是重新发明轮子。然后可以在Interface Builder中创建表格单元UI,您可以使用各种NSTableView
委托方法控制单元格的背景。 NSTableView
会在正确滚动时处理重绘。
要处理图案颜色,只需将单元格的背景设为NSTableCellView
的自定义子类,然后实现图案绘制代码。
无论如何,您遇到的问题是由NSScrollView
绘图优化引起的。您可以通过调用[[yourScrollView contentView] setCopiesOnScroll:NO]
实例上的NSScrollView
来关闭此功能。您也可以在Interface Builder中进行设置,只需取消选中滚动时复制复选框。
答案 1 :(得分:0)
我通过在NSScrollView
上设置背景颜色而不是NSClipView
来解决问题。
我虽然在这种情况下背景会是静态的,但我需要为内容视图设置它,但是它工作得很好,并且与内容视图一起滚动。
感谢Rob Keniger的回答。我可能会试试这个。