¿Cómo hace uno para añadir vistas a una ventana, por lo que las vistas son de tamaño para que encaje dentro del marco de la ventana?

El problema

Estoy haciendo una hoja de ventana con 2 puntos de vista, donde sólo uno de ellos es visible en un momento dado,
así que es importante que las opiniones tienen el mismo tamaño de la ventana. Mi problema es que ya sea
view0 encaja correctamente y vista1 no, o al revés. No puedo entender cómo
darles el mismo tamaño de la ventana.

Posible solución

Yo sólo podía asegurarse de que ambos puntos de vista tienen exactamente el mismo tamaño dentro de la Interfaz de Generador, luego de que iba a funcionar. Sin embargo, yo estoy buscando una manera de hacerlo mediante programación.


Captura de pantalla de view0

A continuación puedes ver la autoresizing problema en la parte superior y el lado derecho, donde la vista es de alguna manera recortadas.

addSubview y autosizing


Captura de pantalla de la vista1

Esta opinión es de tamaño correctamente.

addSubview y autosizing


Aquí está mi código

Pueden las opiniones de tamaño antes de agregarlos a la ventana. O es mejor hacer lo que yo hago ahora, donde las vistas son agrega uno por uno mientras se cambia el marco de la ventana. ¿Cómo hacerlo?

NSView* view0 = /* a view made with IB */;
NSView* view1 = /* another view made with IB */;
NSWindow* window = [self window];

NSRect window_frame = [window frame];

NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease];
[window setContentView:cv];
[cv setAutoresizesSubviews:YES];

//add subview so it fits within the contentview frame
{
    NSView* v = view0;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

//add subview so it fits within the contentview frame
{
    NSView* v = view1;
    [v setHidden:YES];
    [v setAutoresizesSubviews:NO];
    [cv addSubview:v];
    [v setFrameOrigin:NSZeroPoint];
    [window setFrame:[v frame] display:NO];
    [v setAutoresizesSubviews:YES];
}

//restore original window frame
[window setFrame:window_frame display:YES];

[view0 setHidden:NO];
[view1 setHidden:YES];
InformationsquelleAutor neoneye | 2010-04-25

2 Comentarios

  1. 7

    Resuelto! He encontrado una solución aquí en stackoverflow.

    Sería agradable si este código podría ser hecho más corto, aunque.

    NSView* view0 = /* a view made with IB */;
    NSView* view1 = /* another view made with IB */;
    NSWindow* window = [self window];
    
    NSRect window_frame = [window frame];
    
    NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease];
    [window setContentView:cv];
    [cv setAutoresizesSubviews:YES];
    
    //add subview so it fits within the contentview frame
    {
        NSView* v = view0;
        NSRect vframe = [v frame];
        [v setHidden:YES];
        [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
    
        NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease];
        [tmp_superview addSubview:v];
        [tmp_superview setAutoresizesSubviews:YES];
        [tmp_superview setFrame:window_frame];
    
        [v removeFromSuperview];
           [cv addSubview:v];
    }
    
    //add subview so it fits within the contentview frame
    {
        NSView* v = view1;
        NSRect vframe = [v frame];
        [v setHidden:YES];
        [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
    
        NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease];
        [tmp_superview addSubview:v];
        [tmp_superview setAutoresizesSubviews:YES];
        [tmp_superview setFrame:window_frame];
    
        [v removeFromSuperview];
        [cv addSubview:v];
    }
    
    [view0 setHidden:NO];
    • gracias ayudó..
    • esto parece funcionar, aunque curiosamente la parte superior todavía se corta…
  2. -1

    La ventana no se puede saber la vista que desea autosize.Por lo que debe establecer AutoresizezingMask

    [ver setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

Dejar respuesta

Please enter your comment!
Please enter your name here