Pregunta

He creado una aplicación basada en un controlador de navegación. La vista que se abre debajo de la barra NVIGICA tiene una UIIMAGEVIEVIA y un montón de botones de 'divulgación de detalles' en la parte superior de TE UIIMAGE para fines de navegación también.

Lo que estoy notando es que estos botones se han desviado de su posición de diseñador (constructor de la interfaz) cuando aparecen en el simulador.

Sospecho que la barra de navegación tiene algo que ver con eso, pero no se mueven hacia abajo proporcional a la altura de la barra de navegación.

No estoy seguro de cómo decirles que se aferren a su posición.

El UIIMAGE no desborda la altura de la pantalla, incluso con la barra de navegación en la parte superior.

¿Se debe saber sus directrices / Gotchas a saber al usar la barra de navegación en la parte superior?

Estoy usando xcode 4

gracias

Editar:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    StartScreenViewController *controller = 
    [[StartScreenViewController alloc] initWithNibName:@"StartScreenViewController" bundle:nil];
    _navigationController = [[UINavigationController alloc] initWithRootViewController:controller];

    _navigationController.view.frame = CGRectMake(0,0, 320, 460);
    _navigationController.title = @"Test";
    //[self.window addSubview:_navigationController.view];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

Otra cosa es que si uso el método 'AddSubView', entonces la barra de navegación se trunca mientras que si asigno el controlador de navegación a window.rootviewcontroller, veo toda la barra de navegación.

Editar 2

Aquí, cómo mi appdelegate.h se ve

@interface TestAppDelegate : NSObject <UIApplicationDelegate> {

    IBOutlet UIView *mainView;
}

@property (nonatomic, retain) IBOutlet UIView *mainView;

@property (nonatomic, retain) IBOutlet UIWindow *window;

//@property (nonatomic, retain) IBOutlet UIViewController *viewController;

@end

Aquí está el método dePdelegate.m's DidfinishLaunchingWOthoptions

StartScreenViewController *controller = [[StartScreenViewController alloc] initWithNibName:@"StartScreenViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
    navController.title = @"Test";
    navController.view.frame = CGRectMake(0, 0, 320, 460);
    [self.mainView addSubview:navController.view];    
    [self.window makeKeyAndVisible];

El GUINALWINDOW.xIB contiene delegado de la aplicación y la ventana como objetos. La ventana tiene una vista UIVIiendo debajo de ella.

El archivo XIB de StartScreenViewController tiene el UIIMAGEView y los botones.

¿Fue útil?

Solución

Tome algunos disparos de pantalla y vea qué tan lejos se están moviendo. Si es 20px, entonces este es un problema que las toneladas de personas han tenido (incluido yo mismo). Lo arreglé al redefinir la vista para ser del mismo tamaño que está en IB. Por alguna razón, el iPhone intenta ser inteligente y ayudarlo a cambiar las cosas y, a veces, lo hace mal.

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
                navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.window addSubview:navController.view];

Si eso no funciona, intente esta búsqueda: https://stackoverflow.com/search?q=% 5biphone% 5d + 20px .



Editar:

Me perdí una pieza aquí. Para evitar esto, tuve que agregar una vista UIVIE al archivo mainwindow.xib ....

1. En su appdelegate.h, cree una propiedad para iBoutlet UIView * Mainview
2. Haz la cosa @Property para ello y sintetizó en el archivo .m

3. Abra MainWindow.xib
4. Arrastre una vista UIVIA a la ventana (no el ViewController) y que se ajuste al marco completo
5. Haga clic con el botón derecho en el objeto AppDelegate en la ventana Documentos en IB y conecte la propiedad de MainView a la vista UIVIA que acaba de agregar.
6. Ahora en AppDelegate.m ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    navController.view.frame = CGRectMake(0, 0, 320, 460);

    //[self.window addSubview:navController.view]; // old broken way
    [mainView addSubview:navController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

y appdelegate.h:

@interface TestNavigationAppAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    TestNavigationAppViewController *viewController;
    IBOutlet UIView *mainView;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet TestNavigationAppViewController *viewController;
@property (nonatomic, retain) IBOutlet UIView *mainView;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top