问题标签 [nsscrollview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
666 浏览

cocoa - 如何阻止 NSScrollView 在调整大小时滚动?

我正在为第 3 方 PDF 库编写 PDFViewer。我有一个 NSScrollView 的子类和一个 NSView 的子类。问题是当我调整窗口大小时 NSScrollView 会上下滚动。

这是相关代码:

每当调整窗口大小时,我的 NSScrollView 子类都会收到此消息:

在我的 docView 中,NSView 的子类,包含绘制 pdf 的代码

0 投票
1 回答
487 浏览

cocoa - NSScrollView - < 4 行时不显示蓝色按钮滚动条?

除非我的滚动视图有 4 行长,否则 Cocoa 不会呈现蓝色滚动按钮。

比较三个表格视图的屏幕截图,一个有两行没有滚动拇指,两个每个有四行和一个滚动拇指。
(来源:gordonjl.com

有谁知道当滚动视图只有两行时如何显示滚动条按钮?

谢谢!

0 投票
2 回答
2470 浏览

cocoa - 在 NSScrollView 中填充 NSTextView

我想在 NSScrollView 内的 NSTextView 周围提供几个像素的填充。我已经查看了这篇文章,并且使用 setTextContainerInset 可以解决左右边距和底部边距的问题。但是一旦文本滚动,顶部缓冲区就会丢失。与覆盖 textContainerOrigin 相同。该帖子中的另一个答案指出:

TextEdit 执行此操作的方式(在 Wrap to Page 模式下)是将文本视图放在较大的视图中,并将该较大的视图设置为滚动视图的文档视图。

但是如果我这样做(使用,比如说一个 NSBox),内容就不再滚动了。我是否遗漏了有关该特定技巧的某些内容,还是人们可以建议其他任何技巧?

0 投票
3 回答
2775 浏览

objective-c - 我应该如何在 NSScrollView 中包装自定义 NSView?

Cocoa 的NSScrollView解释得非常糟糕。我希望这里有人知道这一切是怎么回事,并且可以节省我几秒钟的时间。

所以我有一个自定义的 NSView。我实现 -drawRect: 让它绘制一些东西,用颜色填充自己,等等。然后我有一个 NSScrollView 包装它(通过界面 Builder 设置)。

现在,内部自定义视图的大小必须大于适合外部滚动视图的大小——它才能滚动。我意识到这一点。我顺便配置了它,以便滚动视图调整到周围窗口的大小,但这无关紧要。

我重写了我的内部视图的 -frame 方法以返回一个大小至少为 1000x1000 的框架。

这是结果,我很难解释:

  • 当滚动视图包围小于 1000x1000 的区域时,我可以滚动

  • 唯一用颜色填充的区域(即我的 -drawRect: 方法对它有任何影响)是

    • 与滚动视图的边界一样大
    • 位于(0,0。我使用翻转,所以它是左上角,滚动后它最终位于可见区域之外。
  • 位于这个无关矩形之外的可见区域根本不会被绘制。

除了这一点,我什么都不知道。似乎绘制的矩形被裁剪到滚动视图窗口中的位置、大小或其他东西——但它没有考虑滚动的“位置”。

应该指出的是,我真的不希望发生任何其他事情。我觉得我错过了一块,但找不到哪个。对不起,文字墙,但我现在无法更好地解释。我希望回答比问更容易。

问候和希望,

不是里克·阿斯特利

0 投票
1 回答
497 浏览

macos - 两个表的链接滚动

如何链接(同步)Cocoa AppKit 中两个 NSTableView(或其底层 NSScrollView)的滚动?

我尝试简单地将一个滚动条设置为另一个滚动条,但这会导致第二个表格失去对滚动条的控制(即它不再出现在表格旁边)。

一个较早的问题针对 UIKit 解决了这个问题,但 AppKit NSScroller 似乎没有提供等效的接口。

任何帮助表示赞赏!

0 投票
1 回答
2354 浏览

cocoa - 将 NSScrollView 与 CALayer 一起使用

我正在尝试创建一个网格样式视图(类似于NSCollectionView),但使用 Core Animation 除外。我已经完成了很远,最后要做的主要事情是实现滚动。

到目前为止,我的设置是我有一个NSView子类(支持层),并在初始化时创建并添加网格层作为主视图层的子层。我CALayoutManager为网格层创建了一个自定义,它以网格状的形式排列其子视图。正如预期的那样,当我将子图层添加到网格图层时,会调用布局管理器并自动定位图层。到目前为止,一切正常。

当我尝试使用 anNSScrollView作为自定义视图的父级来实现滚动时,问题就来了。我将其设置如下:我将自定义视图创建为NSScrollViewInterface Builder 中的子视图。然后,在我的布局管理器类中,我添加了一个delegate属性,并且在初始化期间,我的视图子类将自己设置为布局管理器的委托。在布局管理器的方法结束时layoutSublayersForLayer:,我使用委托方法调用它的委托layoutManager:contentHeightChanged:。这是我的NSView子类中该方法的实现:

这很简单,它只是检查新高度是否大于滚动视图的内容大小,并将视图框架设置为新高度。

这在一定程度上有效。当视图调整大小时,它会适当地调整视图框架的大小,以封装内容的整个高度,从而使滚动条出现。问题:当视图调整大小且滚动条可见时,网格层的子层会抖动。这是一个显示问题的视频:

http://vimeo.com/16987653

如您所见,当滚动条不可见时(换句话说,当内容的高度适合滚动视图的边界时)没有问题。我可以确认这不是布局管理器和处理单列的问题,因为我在没有滚动视图的情况下测试了相同的东西并且没有抖动。

任何意见是极大的赞赏。

0 投票
3 回答
1550 浏览

objective-c - NSScrollView 内容大小不正确

我有一个 NSScrollView ,它是自定义 NSView 子类的父级。子类使用 NSScrollView 的contentSize方法来布局其子视图。

问题是在第一次启动时,NSScrollView 报告 contentSize 错误。它报告的大小比它应该的大小(滚动条的宽度)大 15 像素。所以在我看来,它返回的是 contentSize 而没有考虑到滚动条的宽度;但是,只要我调整滚动视图的框架(通过调整大小等),就会正确报告内容大小。这似乎只是初始启动时的一个问题。

是否应该将此报告为错误,是否有任何好的解决方案?我可以使用在布局期间执行检查的肮脏方式来查看它是否是第一次调用该方法,然后从内容大小中减去 15px,但如果有更好的东西,那将不胜感激。

0 投票
3 回答
3802 浏览

objective-c - 在内容上覆盖 NSScroller

有没有办法将 NSScroller 覆盖滚动视图的内容上(就像在 iOS 中一样)?我已经尝试了几种方法:

a)设置滚动视图内容视图 (NSClipView) 的框架以延伸到滚动条的边界

b)添加一个 NSScroller 对象作为滚动视图的子视图(位于我想要的位置)

c)创建一个完全自定义的滚动视图并将其放置为子视图(这可行,但这意味着我需要重写 NSScroller 的所有功能)

Sparrow似乎成功地做到了这一点,而且它似乎是通过一个常规的 NSScroller 子类来做到的(因为它响应了在 System Preferences >> Appearance 中设置的滚动设置)。问题并不是真正绘制滚动条,它只是让它覆盖内容。

任何建议表示赞赏:-)

0 投票
1 回答
1177 浏览

cocoa - NSScrollView(或 NSClipview)对焦环?

我在 NSScrollView 中有一个自定义 NSView。我正在尝试在 NSScrollView(或者 NSClipView)周围绘制一个焦点环,以便当我的自定义视图接收到拖放悬停时,滚动视图似乎获得焦点。我到底该怎么做?我不想继承 NSScrollView ... 是吗?

0 投票
2 回答
4992 浏览

cocoa - NSScrollView 滚动位置

我目前在 NSScrollView 中有一个 NSView。NSView 很大,我需要滚动来管理里面的对象。

我想在 NSView 的中心绘制一个静态矩形而不滚动。我想在 NSView 的 drawRect 方法中获取滚动点(NSClipPoint?),以便我可以在 drawRect 的最后一步绘制矩形以使其位于顶部。

我查看了文档,只能找到设置滚动点的方法,而没有得到它。我怎样才能明白这一点?