2013-10-30 39 views
1

我正在創建一個OSX PDF查看器應用程序。底部有一個水平滾動條,用戶可以在頁面之間輕鬆滾動。當滾動時,有一個小預覽窗口顯示該頁面的預覽。這在OSX 10.7和10.8下工作正常,但在Mavericks 10.9中,「自動縮放」選項似乎沒有效果。還有一個滾動條(即使將比例設置爲不需要滾動條的值)。PDFView在小牛不會「自動縮放」並始終顯示滾動條

關於如何解決這個問題的任何想法?

OSX 10.7和10.8:

OSX 10.7 and 10.8

OSX小牛:

OSX Mavericks

代碼建立視圖:

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    [_pdfView setAutoScales:YES]; 
    [_pdfView setDisplayMode:kPDFDisplayTwoUp]; 
    [_pdfView setDisplaysPageBreaks:NO]; 
    [self setWantsLayer:YES]; 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [super drawRect:dirtyRect]; 

    CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]; 
    CGContextSetRGBFillColor(context, 0.227,0.251,0.337,0.8); 
    CGContextFillRect(context, NSRectToCGRect(dirtyRect)); 
} 

po [self.previewView _subtreeDescription]的視圖結構:

$0 = 0x0000000113dcd280 [ A  WLU#] h=&-& v=--& IBPreviewView 0x119554760 f=(730.097,47,300,200) b=(-) => <_NSViewBackingLayer: 0x110a5b800> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
    [  O WlU ] h=-&- v=-&- PDFView 0x104cb9c20 f=(10,60,280,130) b=(-) => <_NSViewBackingLayer: 0x114e311a0> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
    [ AF O wlU ] h=--- v=--- PDFViewScrollView 0x110a36c60 f=(0,0,280,130) b=(-) => <_NSViewBackingLayer: 0x110a374a0> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
     [ AF O wlU ] h=--- v=--- PDFCenteringClipView 0x110a2ba30 f=(0,0,265,130) b=(0.5,0,-,-) => <_NSClipViewBackingLayer: 0x110a42b70> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
     [ AF O WLU ] h=--- v=--- PDFMatteView 0x110a28730 f=(0,0,980,683) b=(-) => <_NSViewBackingLayer: 0x110a3b600> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
      [ A  LU ] h=--- v=--- PDFDisplayView 0x114e309b0 f=(0,0,980,683) b=(-) TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
     [ AF wlU ] h=--- v=--- NSScroller 0x100766e50 f=(265,0,15,130) b=(-) => <_NSViewBackingLayer: 0x100766e20> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
    [ AF wlU ] h=-&- v=-&- NSTextField 0x104c87110 f=(7,27,286,25) b=(-) => <_NSViewBackingLayer: 0x110a5b910> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
    [ AF wlU ] h=-&- v=-&- NSTextField 0x110a2ef60 "76 av 152" f=(89,0,115,25) b=(-) => <_NSViewBackingLayer: 0x110a5b970> TIME drawRect: min/mean/max 0.00/0.00/0.00 ms 
A=autoresizesSubviews, C=canDrawConcurrently, D=needsDisplay, F=flipped, G=gstate, H=hidden (h=by ancestor), L=needsLayout (l=child needsLayout), U=needsUpdateConstraints (u=child needsUpdateConstraints), O=opaque, P=preservesContentDuringLiveResize, S=scaled/rotated, W=wantsLayer (w=ancestor wantsLayer), #=has surface 

我也有兩個_pdfView setNeedsLayout:YESsetNeedsDisplay:YES和自我測試,沒有任何變化。

有什麼建議嗎?

+1

同樣的問題。但是,當我調整窗口大小時,它會自動縮放。 – Colas

回答

0

似乎是一個錯誤。通過調整超級視圖來解決它。然後它自動調整大小。

//int widthModifierForMavericksWorkaround = 1; 

-(void)refresh 
{ 
    // Ugly workaround for Mavericks, resize view so it updates its scale 

    CGSize size = self.frame.size; 
    size.width += widthModifierForMavericksWorkaround; 
    [self resizeSubviewsWithOldSize:size]; 

    widthModifierForMavericksWorkaround *= -1; 
} 
+0

我發現這不適合我。另外,文檔明確說不要調用-resizeWithOldSuperviewSize :. –

0

嘗試這樣做,已經加載了pdf文檔之後:

[self.pdfView setDocument:pdfDoc]; 
[self.pdfView zoomIn:self]; 
[self.pdfView setAutoScales:YES]; 
+0

抱歉不起作用。但解決它(相當醜陋),但改變超視圖的寬度,使其自動縮放。 – Sunkas

+0

我發現改變寬度確實會使它自動縮放,但在小牛上這會導致PDF在PDFView的顯示模式設置爲連續時部分向下滾動顯示。 –

3

試試這個:

self.pdfView.autoScales = NO; 
self.pdfView.document = _currentDocument 
self.pdfView.autoScales = YES; 

它爲我工作,所以希望爲您服務。

+0

這似乎適合我... – Redth

+0

謝謝!這也適用於我,雖然我不明白爲什麼。 –