Cocoa PDFView no cambia de tamaño
-
21-12-2019 - |
Pregunta
Estoy intentando crear una subclase personalizada del PDFView
clase en XCode.agrego un PDFView
instancia a mi ventana en InterfaceBuiler y crear los siguientes archivos para la subclase:
MiPDFView.h:
#import <Quartz/Quartz.h>
@interface MyPDFView : PDFView
-(void)awakeFromNib;
-(void)mouseDown:(NSEvent *)theEvent;
@end
MiPDFView.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
Sin embargo, a pesar de configurar todo apropiadamente y el posterior NSLog
declaraciones que se activan cuando el PDFView
Se hace clic en el área para confirmar que el objeto DEBE cambiar de tamaño. Cambiar el tamaño de la ventana no cambia el tamaño de la ventana. PDFView
.¿Alguien puede explicarme qué debo hacer para que el PDFView
¿Escala de área con el tamaño de la ventana principal?
El código completo de este proyecto que le permitirá compilarlo y ejecutarlo está aquí:
Solución
Entiendo que su requisito es cambiar el tamaño del PDFView
a medida que cambia el tamaño de la ventana principal.Hay dos maneras de lograr esto.
- Configuración de la máscara de tamaño automático
- A pesar de que ha establecido programáticamente la máscara de autoresización, esto no es efectivo ya que Autolayout se ha activado para sus vistas (cuando crea proyectos de forma predeterminada en XCode 5, los archivos XIB están configurados de forma predeterminada para Autolayout).Desactive la función Diseño automático desmarcando la casilla "Usar diseño automático" en la pestaña "Identidad y tipo" en el panel Utilidades en Xcode para el archivo MainMenu.xib.
- Modificar MyPDFView -(vacío)despiertoDesdeNib agregando la línea de código
[self setFrame:[self superview].bounds];
- Usar Autolayout definiendo restricciones de diseño
- Esto se puede hacer en Interface Builder o mediante código mediante programación. Lea la Guía de diseño automático de Apple Cocoa