Cocoa PDFView ändert die Größe nicht
-
21-12-2019 - |
Frage
Ich versuche, eine benutzerdefinierte Unterklasse von zu erstellen PDFView
Klasse in XCode.Ich füge ein hinzu PDFView
Instanz zu meinem Fenster in InterfaceBuiler hinzufügen und die folgenden Dateien für die Unterklasse erstellen:
MyPDFView.h:
#import <Quartz/Quartz.h>
@interface MyPDFView : PDFView
-(void)awakeFromNib;
-(void)mouseDown:(NSEvent *)theEvent;
@end
MyPDFView.m:
#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
Allerdings trotz der richtigen Einstellung und der anschließenden NSLog
Anweisungen, die ausgelöst werden, wenn die PDFView
Durch Klicken auf den Bereich wird bestätigt, dass die Größe des Objekts geändert werden sollte. Durch die Größenänderung des Fensters wird die Größe des Objekts nicht geändert PDFView
.Kann mir jemand erklären, was ich tun muss, um das zu machen? PDFView
Flächenskalierung mit der Größe des übergeordneten Fensters?
Den vollständigen Code für dieses Projekt, mit dem Sie es erstellen und ausführen können, finden Sie hier:
Lösung
Ich verstehe, dass Ihre Anforderung darin besteht, die Größe zu ändern PDFView
wenn Sie die Größe des übergeordneten Fensters ändern.Es gibt zwei Möglichkeiten, dies zu erreichen
- Festlegen der automatischen Größenänderungsmaske
- Obwohl Sie die Autorisierungsmaske programmatisch festgelegt haben, ist dies nicht effektiv, da Autolayout für Ihre Ansichten aktiviert wurde (wenn Sie standardmäßig Projekte auf XCode 5 erstellen, sind die XIB -Dateien standardmäßig für autolayout festgelegt).Deaktivieren Sie die Autolayout-Funktion, indem Sie das Kontrollkästchen „Autolayout verwenden“ auf der Registerkarte „Identität und Typ“ im Bereich „Dienstprogramme“ in Xcode für die Datei „MainMenu.xib“ deaktivieren.
- Ändern Sie die MyPDFViews -(void)awakeFromNib durch Hinzufügen der Codezeile
[self setFrame:[self superview].bounds];
- Verwenden von Autolayout durch Definieren von Layoutbeschränkungen
- Dies kann im Interface Builder oder programmgesteuert durch Code erfolgen. Bitte lesen Sie den Apple Cocoa Auto Layout Guide