10

我有一个包含 NSImageView 的 NSScrollView,它会根据各种因素调整大小。当它调整大小时,我通常会更改图像,所以我将 NSScrollView 滚动到顶部。这工作正常。但是,当我再次开始滚动 NSScrollView 时,它会移动几个像素,然后(大部分时间)跳到滚动的底部。跳转一次后,它会正常工作,直到我再次将滚动条移到顶部。这让我发疯。我真正要做的是:

[_imageView setImage: anNSImage];

NSRect frame;

NSSize imageSize = [anNSImage] size];
frame.size = imageSize;
frame.origin = NSZeroPoint;

[_imageView setFrame: frame];
[[_mainScrollview contentView] scrollToPoint: NSMakePoint(0, [_imageView frame].size.height - [_mainScrollview frame].size.height)];
4

6 回答 6

11

尼克,谢谢你的代码。我修改了您的代码,现在运行良好。首先,您需要将垂直滚动条滚动到顶部。其次,滚动内容视图。

    // Scroll the vertical scroller to top
    if ([_scrollView hasVerticalScroller]) {
        _scrollView.verticalScroller.floatValue = 0;
    }

    // Scroll the contentView to top
    [_scrollView.contentView scrollToPoint:NSMakePoint(0, ((NSView*)_scrollView.documentView).frame.size.height - _scrollView.contentSize.height)];
于 2011-12-27T15:19:23.367 回答
3

要规避此错误,您只需启用滚动条,然后设置滚动条的隐藏属性。由于 NSScrollers 从 NSView 继承,这只会阻止它们显示自己:

mainScrollView.hasHorizontalScroller = YES;
mainScrollView.hasVerticalScroller = YES;
mainScrollView.verticalScroller.hidden = YES;
mainScrollView.horizontalScroller.hidden = YES;

至少对我有用。仅在 OS 10.7.2 上测试过。

顺便说一句,有人有雷达吗?如果没有人告诉他们,他们不会修复它。:)

于 2012-01-03T18:51:30.263 回答
2

似乎我可以使用reflectScrolledClipView:而不是设置滚动条的值来同步位置。前任。

[self.scrollView.contentView scrollToPoint:NSMakePoint(300, 0)];
[self.scrollView reflectScrolledClipView:self.scrollView.contentView]; // synced then
于 2013-03-15T13:06:37.433 回答
1

我的 hacky 解决方案。打开 Show Vertical Scroller(就像 Chetan 说的,这是触发错误的原因)。将表格视图发送到后面。展开表格视图的左边缘,直到滚动条被它的右边缘所覆盖。

于 2011-10-17T10:22:53.580 回答
1

在 macOS Sierra 上,[_scrollView.contentView scrollToPoint:]; 出现故障并导致不稳定的闪烁。但是使用[_scrollView.documentView scrollPoint:]为我清除了所有这些问题。这也是 Apple 在此处找到的教程中建议的方法。

于 2017-03-24T15:17:11.387 回答
-4

您设置 scrollView.contentOffset = CGPointMake(0,0)。或根据您的要求。更改图像后设置 contectoffset。

于 2010-12-22T08:50:31.973 回答