gpt4 book ai didi

cocoa - 在其边界之外绘制 NSTableView 的背景

转载 作者:行者123 更新时间:2023-12-03 16:04:58 25 4
gpt4 key购买 nike

自从 Lion 引入弹性滚动(如下图所示)以来,我遇到了问题。当您将我的表格 View (基于单元格,具有交替行颜色)滚动到其边界之外时,背景不会绘制。我尝试在 -[drawBackgroundInClipRect:] 中进行自己的绘图,但似乎不能超出 TableView 的边界。如何将背景扩展到弹性滚动区域?

Scrolling left of table

最佳答案

回答您的问题

在其边界之外绘制 View 通常是禁忌。当使用交替背景颜色时,NSTableView 直接绘制其背景。但在基于 View 的表格 View 中,使用了 NSTableRowView,如果它有自己的背景颜色,这就带来了更大的挑战。

坏消息

NSScrollView(及其各个部分)、NSTableView 和 NSTableHeaderView 的组合本身就很复杂。一旦您将基于 View 的功能放入混合中(其中每行都有一个 View ,每个单元格都有自己的 View ,并且每个单元格都被重用,围绕动画等),覆盖这种行为“是不可能度过一生的,儿子!” ;-)

好消息

在弹性拉伸(stretch)的滚动表格 View 中交替背景颜色不延伸的问题已得到解决(至少在 10.10 上,我可以这么说),所以这不再是问题,除非您具有带有自定义背景或仅背景颜色的行/单元格 View 。

自定义文档(滚动) View 的通用解决方案

对于您希望扩展弹性滚动的所有其他具有规则背景的 ScrollView ,您需要一个自定义 NSScrollView 子类,该子类期望文档 View (您的自定义 ScrollView )符合您定义的协议(protocol)(例如 -(NSImage *)backgroundImageForClipViewBounds:)。 ScrollView 将观察其内容 View (NSClipView)以获取边界更改通知,并标记自身以进行显示。当 ScrollView 的 -drawRect: 被调用时,它会询问 ScrollView 的 -backgroundImageForClipViewBounds: (通过您的协议(protocol))并将其绘制到自身中,从而使 ScrollView 的“无限背景”是它自己的。

我还没有测试过这个理论,但我相信它会起作用。我希望这会有所帮助。

关于cocoa - 在其边界之外绘制 NSTableView 的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com