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 でのみテストされています。

ところで、この 1 つにレーダーを提出した人はいますか? 誰も言わなければ、彼らはそれを修正しません。:)

于 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

私のハッキーな解決策。Show Vertical Scroller をオンにします (Chetan が言ったように、これがバグの引き金になります)。テーブル ビューを背面に移動します。スクローラーがその右端にあるもので覆われるまで、テーブル ビューの左端を展開します。

于 2011-10-17T10:22:53.580 に答える
-4

scrollView.contentOffset = CGPointMake(0,0) を設定します。またはあなたの条件に従って。イメージを変更したら、contectoffset を設定します。

于 2010-12-22T08:50:31.973 に答える