You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在翻转客户端视图下计算垂直NSRulerMarker的正确位置?

解决NSScrollView标尺标记垂直位置偏移问题

场景说明:将名为“主视图”的翻转视图(原点位于左上角)嵌入带标尺的NSScrollView中,主视图包含子视图,需要在用户拖动子视图时,在标尺上显示子视图的当前位置。

水平位置的计算逻辑简单且能正常工作:

NSPoint scroll = myScrollView.documentVisibleRect.origin;
NSRect rect = mySubView.frame;
rulerMarkerDragLeft.markerLocation = rect.origin.x - scroll.x;

但用同样逻辑计算垂直位置时,出现异常:

rulerMarkerDragTop.markerLocation = rect.origin.y - scroll.y;

异常表现:仅当滚动视图滚动至最底部时,标记位置正确;每向上滚动n个点,标记位置就会偏高n个点,该问题与主视图尺寸或可见区域大小无关。最初尝试寻找额外的滚动偏移值,但无法从myScrollView.documentVisibleRect中获取有效参数。

2022-11-02 17:17 CET 更新:已定位问题根源。此前将NSRulerView的clientView设置为窗口的contentView,现在改为设置为“主视图”(即滚动视图内部的视图)后,问题自动解决。现在只需直接将标记位置设为子视图的frame即可,无需再修正滚动位置等参数。

内容的提问来源于stack exchange,提问作者fbitterlich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:10:59