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

如何检测NSScrollView中的内容是否超出显示范围可滚动?

检测NSScrollView中是否存在超出显示范围的文本

你直接对比scrollView.contentSize和scrollView.bounds.size时两者始终一致,核心原因是NSScrollView的contentSize由其document view(通常是承载文本的NSTextView)的尺寸决定,如果document view没有根据文本内容正确计算自身高度,就会导致contentSize和可视区域尺寸同步。

以下是可行的检测方案:

方案1:直接对比文本内容实际高度与可视区域高度

获取document view中文本的真实高度,再和scrollView的可视区域高度(需扣除滚动条占用空间)对比:

NSTextView *textView = (NSTextView *)self.scrollView.documentView;
// 获取文本内容的实际高度
CGFloat textContentHeight = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size.height;
// 计算可视区域高度(减去垂直滚动条宽度,避免滚动条占用空间影响判断)
CGFloat visibleHeight = self.scrollView.bounds.size.height - self.scrollView.verticalScroller.frame.size.width;

if (textContentHeight > visibleHeight) {
    NSLog(@"存在超出显示范围的文本,可滚动");
}

方案2:通过滚动条启用状态判断

如果滚动条的启用状态正常关联内容尺寸,可以直接检查:

if (self.scrollView.verticalScroller.isEnabled) {
    NSLog(@"存在超出显示范围的文本,可滚动");
}

注意:此方案依赖滚动条的启用设置,若滚动条被强制隐藏但内容确实超出,判断会失效。

关键前提

确保承载文本的NSTextView的textContainer的heightTracksTextView属性设为NO,这样textView才会根据文本内容自动调整自身高度,让scrollView的contentSize正确更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:41:05