Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将patternimage用于NSScrollView中的视图_Objective C_Cocoa_Background Image_Clipping_Nsscrollview - Fatal编程技术网

Objective c 将patternimage用于NSScrollView中的视图

Objective c 将patternimage用于NSScrollView中的视图,objective-c,cocoa,background-image,clipping,nsscrollview,Objective C,Cocoa,Background Image,Clipping,Nsscrollview,我有一个相当大的问题,我真的无法解决自己 结果应该如下所示: 这张图片是用photoshop制作的,是我试图构建的界面的一部分 在中间你会看到一些东西,那应该是一个项目列表,你应该能够滚动,如果列表比视图大的话 因此,我制作了一个如下的滚动视图:(由于某些原因,我无法在interface builder中执行此操作,并希望它以编程方式工作) 然后我创建内容视图并将图案图像设置为背景色: NSClipView *contentView = [[NSClipView alloc] i

我有一个相当大的问题,我真的无法解决自己

结果应该如下所示:

这张图片是用photoshop制作的,是我试图构建的界面的一部分

在中间你会看到一些东西,那应该是一个项目列表,你应该能够滚动,如果列表比视图大的话

因此,我制作了一个如下的滚动视图:(由于某些原因,我无法在interface builder中执行此操作,并希望它以编程方式工作)

然后我创建内容视图并将图案图像设置为背景色:

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];
我也尝试过这个,但它导致contentview根本不滚动。 图像保持不变,但我可以正常移动滚动条

[[projectsListView contentView] setCopiesOnScroll:NO];
如果我尝试使用setContentView:而不是使用setDocumentView设置contentview: 它可能会工作,但滚动条不见了,因此也不能正常工作

我真的很想使用patternimage方法,因为我不知道列表的长度。这取决于用户

另外一个问题是要把整件事都整好,但这并不重要。我尝试使用透明边框图像,并使用NSImageView覆盖NSScrollView,但这同样会导致损坏,因为它会将图像视图的覆盖部分与scrollview的内容一起剪切和移动

谁有想法,如何实现这一点


多亏了而不是重新发明控制盘,该界面应该使用基于视图的
NSTableView
实现。然后可以在Interface Builder中创建表格单元格UI,您可以使用各种
NSTableView
委托方法控制单元格的背景<代码>NSTableView将在正确滚动时处理重绘

要处理图案颜色,只需将单元格的背景设置为
NSTableCellView
的自定义子类,并实现图案绘制代码


尽管如此,您遇到的问题是由于
NSScrollView
图形优化造成的。您可以通过在
NSScrollView
实例上调用
[[yourScrollView contentView]setCopiesOnScroll:NO]
来关闭此功能。您也可以在Interface Builder中进行设置,只需取消选中“滚动复制”复选框。

此界面应使用基于视图的
NSTableView
来实现,而不是重新发明控制盘。然后可以在Interface Builder中创建表格单元格UI,您可以使用各种
NSTableView
委托方法控制单元格的背景<代码>NSTableView将在正确滚动时处理重绘

要处理图案颜色,只需将单元格的背景设置为
NSTableCellView
的自定义子类,并实现图案绘制代码


尽管如此,您遇到的问题是由于
NSScrollView
图形优化造成的。您可以通过在
NSScrollView
实例上调用
[[yourScrollView contentView]setCopiesOnScroll:NO]
来关闭此功能。您也可以在Interface Builder中设置此选项,只需取消选中滚动复制复选框。

我通过在
NSScrollView
上设置背景色,而不是在
NSClipView
上设置背景色,解决了此问题

我认为在这种情况下背景是静态的,因此我需要将其设置为内容视图,但它工作得很好,并与内容视图一起滚动


谢谢Rob Keniger的回答。我可能会尝试一下。

我通过在
nscrollview
上设置背景色,而不是在
NSClipView
上设置背景色,解决了这个问题

我认为在这种情况下背景是静态的,因此我需要将其设置为内容视图,但它工作得很好,并与内容视图一起滚动


谢谢Rob Keniger的回答。我可能会尝试一下。

正如我所说,我确实尝试过设置复制的nscroll。然而,它并没有像预期的那样起作用。正如我所说的,我确实尝试了setcopiedenscroll。然而,它并没有像预期的那样起作用。
[[projectsListView contentView] setCopiesOnScroll:NO];