2010-12-22 120 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。在這種情況下,當我改變內容時,滾動點保持靜態,所以如果它在我切換的頂部,那麼它保持不變。 – 2011-01-05 19:25:29

+0

但是,我仍然想最初設置它。我設置了一次,它改變位置,我開始滾動,它跳到底部。我試過設置reflectScrolledClipView,無濟於事。 – 2011-01-05 19:26:38

+0

我的問題與您的問題幾乎相同,任何人都可以提供幫助? http://stackoverflow.com/questions/6596567/synchronize-two-nsscrollview – disorderdev 2011-07-07 14:19:37

回答

-4

您設置了scrollView.contentOffset = CGPointMake(0,0)。或根據您的要求。更改圖像後設置contectoffset。

0

我的哈克解決方案。打開顯示垂直滾動(像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)]; 
3

爲了規避此錯誤,您只需啓用滾動條,然後設置滾動條的隱藏屬性即可。由於NSScrollers繼承自NSView,這隻會阻止他們顯示自己:

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

至少適用於我。但只在OS 10.7.2上進行了測試。

有沒有人有這個順便說一句雷達提交?如果沒有人告訴他們,他們不會解決它。 :)

2

似乎我可以使用reflectScrolledClipView:而不是設置滾動條的值來同步位置。防爆。

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

在MacOS塞拉利昂,[_scrollView.contentView scrollToPoint:];是越野車,並造成不穩定的閃爍。但是使用[_scrollView.documentView scrollPoint:]爲我解決了所有這些問題。這也是Apple在他們的教程中發現的建議方法here