Conception de l'interface utilisateur pour l'iPhone pour le contrôleur de navigation - Boutons se déplaçant vers le bas

StackOverflow https://stackoverflow.com/questions/6017610

Question

J'ai créé une application basée sur le contrôleur de navigation. La vue qui s'ouvre en dessous de la barre de nvigation a un UIImageView et un tas de boutons de «divulgation de détail» en haut de TE UIIMage à des fins de navigation.

Ce que je remarque, c'est que ces boutons sont déviés de leur position de concepteur (constructeur d'interface) lorsqu'ils apparaissent dans le simulateur.

Je soupçonne que la barre de navigation a quelque chose à voir avec cela, mais ils ne descendent pas proportionnels à la hauteur de la barre de navigation.

Je ne sais pas comment leur dire de conserver leur position.

L'UIIMage ne déborde pas la hauteur de l'écran même avec la barre Navigaion en haut.

Sont-ils des directives / gotchas que l'on doit savoir lors de l'utilisation de la barre de navigation en haut?

J'utilise xcode 4

Merci

Éditer:

- (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;
}

Une autre chose est que si j'utilise la méthode «AddSubView», la barre de navigation est tronquée tandis que si j'attribue le contrôleur NAV à Window.RootViewController, je vois toute la barre de navigation.

Modifier 2

Voici à quoi ressemble mon appdelegate.h

@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

Voici la méthode DIDFINISHLAUNDINGSWITHOPTIONS de l'AppDelegate.m

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];

Le mainwindow.xib contient l'application Delegate et la fenêtre comme objets. La fenêtre a un uiView en dessous.

StartScreenViewController Le fichier XIB a le UIImageView et les boutons.

Était-ce utile?

La solution

Prenez quelques captures d'écran et voyez jusqu'où ils sont déplacés. Si son 20px, c'est un problème que des tonnes de personnes ont eu (y compris moi-même). Je l'ai corrigé en redéfinissant la vue pour être de la même taille que dans IB. Pour une raison quelconque, l'iPhone essaie d'être intelligent et de vous aider à redimensionner les choses et parfois ça fait mal.

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

Si cela ne fonctionne pas, essayez cette recherche: https://stackoverflow.com/search?q=%5BiPhone%5D+20px.


ÉDITER:
J'ai raté un morceau ici. Afin de contourner cela, j'ai dû ajouter un uiView au fichier MainWindow.xib ....

1. Dans votre appdelegate.h, créez une propriété pour iboutlet uiView * MainView
2. Faites le truc @Property pour cela et synthétisez-le dans le fichier .m
3. Ouvrez Mainwindow.xib
4. Faites glisser un uiView sur la fenêtre (pas le ViewController) et faites-le s'adapter au cadre complet
5. Cliquez avec le bouton droit sur l'objet AppDelegate dans la fenêtre Documents dans IB et connectez la propriété MainView à l'UIView que vous venez d'ajouter.
6. Maintenant dans 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;
}

et 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top