Objective c Cocoa PDFView不调整大小

Objective c Cocoa PDFView不调整大小,objective-c,cocoa,pdfview,Objective C,Cocoa,Pdfview,我试图在XCode中创建PDFView类的自定义子类。我在InterfaceBuiler中将PDFView实例添加到我的窗口中,并为该子类创建以下文件: MyPDFView.h: #import <Quartz/Quartz.h> @interface MyPDFView : PDFView -(void)awakeFromNib; -(void)mouseDown:(NSEvent *)theEvent; @end #import "MyPDFView.h" @imple

我试图在XCode中创建
PDFView
类的自定义子类。我在InterfaceBuiler中将
PDFView
实例添加到我的窗口中,并为该子类创建以下文件:

MyPDFView.h:

#import <Quartz/Quartz.h>

@interface MyPDFView : PDFView

-(void)awakeFromNib;
-(void)mouseDown:(NSEvent *)theEvent;

@end
#import "MyPDFView.h"

@implementation MyPDFView

-(void)awakeFromNib
{
    [self setAutoresizingMask: NSViewHeightSizable|NSViewWidthSizable|NSViewMinXMargin|NSViewMaxXMargin|NSViewMinYMargin|NSViewMaxYMargin];
    [self setAutoScales:YES];
}

- (void)mouseDown:(NSEvent *)theEvent
{
    unsigned long mask = [self autoresizingMask];
    NSLog(@"self autoresizingMask: %lu",mask);
    NSLog(@"NSViewHeightSizable: %lu",mask & NSViewHeightSizable);
    NSLog(@"NSViewWidthSizable: %lu",mask & NSViewWidthSizable);
    NSLog(@"self setAutoScales: %@",[self autoScales] ? @"YES" : @"NO");
    NSView* sv = [self superview];
    NSLog(@"superview autoresizesSubviews: %@",[sv autoresizesSubviews] ? @"YES" : @"NO");
    NSSize frame_dims = [self frame].size;
    NSLog(@"Frame: (%f,%f)",frame_dims.width,frame_dims.height);
    NSSize bounds_dims = [self bounds].size;
    NSLog(@"Bounds: (%f,%f)",bounds_dims.width,bounds_dims.height);
    NSSize sv_frame_dims = [sv frame].size;
    NSLog(@"Superview Frame: (%f,%f)",sv_frame_dims.width,sv_frame_dims.height);
    NSSize sv_bounds_dims = [sv bounds].size;
    NSLog(@"Superview Bounds: (%f,%f)",sv_bounds_dims.width,sv_bounds_dims.height);
    [super mouseDown:theEvent];
}
@end
但是,尽管适当地设置了所有内容,并在单击
PDFView
区域确认对象应调整大小时触发后续的
NSLog
语句,但调整窗口大小不会调整
PDFView
的大小。谁能解释一下我需要做什么才能使
PDFView
面积与父窗口的大小成比例

此项目的完整代码将允许您构建和运行它,如下所示:


我知道您的要求是在调整父窗口的大小时调整
PDFView
。实现这一目标有两种方法

  • 设置自动调整大小掩码
    • 即使您已通过编程方式设置自动调整大小掩码,但这并不有效,因为已为视图启用了autolayout(当您在Xcode 5上默认创建项目时,默认情况下会为autolayout设置xib文件) )。通过取消选中MainMenu.xib文件的Xcode中“实用程序”窗格中“标识和类型”选项卡中的“使用自动布局”复选框,关闭自动布局功能
    • 通过添加代码行
      [self-setFrame:[self-superview].bounds],修改MyPDFView的-(void)awakeFromNib
  • 通过定义布局约束使用自动布局
    • 这可以在Interface Builder中完成,也可以通过编程方式通过代码完成

  • 这很有效。我不知道autolayout是如何覆盖编程选项的。注意:它位于“文件检查器”选项卡中,而不是Xcode 5中的“身份检查器”选项卡中。