2

OSX PDF ビューア アプリケーションを作成しています。下部には水平スクロール バーがあり、ユーザーはページ間を簡単にスクロールできます。スクロールすると、そのページのプレビューを示す小さなプレビュー ウィンドウが表示されます。これは OSX 10.7 および 10.8 では正常に機能しますが、Mavericks 10.9 では「自動スケール」オプションの効果が失われるようです。スクロールバーもあります (スクロールバーを必要としない値にスケールを設定した場合でも)。

これを解決する方法についてのアイデアはありますか?

OS X 10.7 および 10.8:

OS X 10.7 および 10.8

OSX マーベリックス:

OSXマーベリックス

ビューを設定するためのコード:

- (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 と self の両方でsetNeedsLayout:YESテストしました。setNeedsDisplay:YES

助言がありますか?

4

3 に答える 3

4

これを試して:

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

それは私のために働いたので、うまくいけばあなたのために。

于 2013-11-23T18:18:37.277 に答える