Cacao PDFView non ridimensiona
-
21-12-2019 - |
Domanda
Sto tentando di creare una sottoclasse personalizzata della classe PDFView
in XCode.Aggiungo un'istanza PDFView
alla mia finestra in InterfaceBuiler e crea i seguenti file per la sottCLASSA:
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
.
Tuttavia, nonostante l'impostazione di tutto ciò che è in modo appropriato e le successive istruzioni NSLog
che attivano quando si fa clic sull'area PDFView
confermando che l'oggetto deve ridimensionare, il ridimensionamento della finestra non ridimensiona il PDFView
.Qualcuno può spiegare cosa devo fare per rendere la scala dell'area PDFView
con le dimensioni della finestra genitore?
Il codice completo per questo progetto che ti permetterà di costruire ed eseguire è qui:
Soluzione
Capisco che il tuo requisito è quello di ridimensionare il PDFView
mentre ridimensiona la finestra genitore. Ci sono due modi per raggiungere questo
- .
- Impostazione della maschera di esecuzione
- .
- Anche se hai programmaticamente impostare la maschera di autoresizing, questo non è efficace come è stato attivato Autolayout per le viste (quando crei progetti per impostazione predefinita su Xcode 5, i file XIB sono predefiniti per Autolayout ). Disattiva la funzione AutoLayout deselezionando la casella di controllo "Usa AutoLayout" nella scheda "Identità e Tipo" nel riquadro Utilities in XCode per il file mainmenu.xib.
- Modifica il
MyPDFView> - (Void) AwakeFromnib aggiungendo la linea di code [self setFrame:[self superview].bounds];
- Utilizzo dell'autolayout definendo i vincoli del layout
- .
- Questo può essere fatto nel costruttore di interfaccia o nel codice programmaticamente. Si prega di leggere la Guida alla layout Auto Cocoa Apple