2010-12-22 6 views
10

NSImageViewを含むNSScrollViewがあり、これはさまざまな要因に基づいてサイズが変更されます。サイズを変更すると、イメージが一般的に変更されたので、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)]; 
+0

私は非常に必死になっているので、この質問が誰かに気付かれることを願ってコメントします。私のNSScrollViewが反転されましたが、うまくいきました。なぜなら、scrollToPointを全くやりなおすことができないからです。この場合、コンテンツを変更するとスクロールポイントは静的なままなので、スイッチを入れると上部に表示されます。 –

+0

しかし、私はまだそれを最初に設定したいと思います。私は一度それを設定し、それは位置を変え、私はスクロールし始め、それは底に飛びます。 reflectScrolledClipViewを無駄に設定しようとしました。 –

+0

私はあなたとほぼ同じ問題を抱えています。 http://stackoverflow.com/questions/6596567/synchronize-two-nsscrollview – disorderdev

答えて

-4

scrollView.contentOffset = CGPointMake(0,0)を設定します。またはあなたの要件に応じて。イメージを変更した後にcontectoffsetを設定します。

+2

UIScrollViewにはcontentOffsetプロパティのみがあります。 NSScrollViewはありません。 –

0

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

8

あなたのコードに感謝します。 私はあなたのコードを修正しました。 まず、垂直スクロールバーを上にスクロールする必要があります。次に、コンテンツビューをスクロールします。

// 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)]; 
+0

ありがとう!それは私のために働いた! – Developer

+0

完璧に私のために働いた、ありがとう! – Chris

+0

ありがとう!これは最後に働いたものです... 今、私はscrollToPointがなぜこれを理解する必要があるのですか:常に動作しますが、scrollPoint:とscrollRectToVisible:時には問題があります。 –

3

このバグを回避するには、スクロールバーを有効にしてスクロールバーの隠れたプロパティを設定するだけです。 NSScrollerがNSViewから継承するので、表示されなくなります。

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

少なくとも私のために機能します。しかし、OS 10.7.2でしかテストされていません。

レーダーを持っている人はいますか?誰も言わないなら、彼らはそれを修正しません。 :)

+1

これはうまくいきますが、 'hidden'プロパティを設定するときは注意が必要です。どうやら、 'windowDidLoad'は早すぎます。 – jmk

2

私はの代わりに、設定されたスクロールバーの値を使って位置を同期させることができます。 Ex。 MacOSのシエラ、[_scrollView.contentView scrollToPoint:];

[self.scrollView.contentView scrollToPoint:NSMakePoint(300, 0)]; 
[self.scrollView reflectScrolledClipView:self.scrollView.contentView]; // synced then 
0

バギーであり、不安定なちらつきを引き起こしていました。しかし、[_scrollView.documentView scrollPoint:]を使用すると、これらの問題がすべて解決されました。これはAppleがチュートリアルで提案した方法であるhereにもあります。

関連する問題