Frage

Ich habe ein einfaches iPhone App erstellt, die zwei .xib Dateien haben. Im AppDelegate bei Anwendung hat Finish Start ich die erste .xib Datei durch den Aufruf an:

[window addSubview:myView];

, und ich tue das gleiche auf einem IBAction für eine UIButton der Ansicht myView2 zu ändern.

Was ich finde, ist, dass es einen weißen Balken von rund 10 Pixel ist, wenn ich die App laufe, für beiden Ansichten. Ich bemerke auch, dass die Tasten um 10 Pixel versetzt sind (ca..). Also ich habe den Eindruck, dass die Sicht aus dem Bildschirm von 10 Pixeln angezeigt wird und kurz endet.

Jede Idee, warum dies passiert sein könnte, wie ich es beheben kann, oder wie kann ich debug weiter, was los ist? Ich habe meine .xib Dateien überprüft und sie über die gesamte Höhe der Gerätes verbrauchen (das heißt keine weißen Balken), so sieht das ein Problem innerhalb XCode sein.

EDIT: Ich habe das Problem ein wenig verengt. Ich bin mit zwei Methoden, um die Subview zu laden. Als ich das erste Blick ins Innere applicationDidFinishLaunching alles geladen ist in Ordnung. Allerdings, wenn ich die beiden Nachrichten an window mit der [self originalView] Methode ersetzen, dann geht alles ein bisschen drunter und drüber.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    //[self originalView];  <- I want to use this instead of the following two lines

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}

-(void)endView{
    endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
    [window removeFromSuperview];
    [window addSubview:endV.view];  
}
-(void)originalView{
    viewController = [[MyAppViewController alloc] init];
    [window removeFromSuperview];
    [window addSubview:viewController.view];

}

Von dem, was ich sehen kann, ich bin immer die gleichen Zeilen Code aufrufen, egal, ob es innerhalb der applicationDidFinishLaunching oder in [self originalView] aber es scheint wie window erweist sich ein anderes Objekt sein.

War es hilfreich?

Lösung

Bei Verwendung eines UIViewController die normale Art und Weise (dh es auf einem UINavigationController schieben), sie paßt Rahmens seiner Ansicht.

Da Sie die subview manuell sind hinzufügen, müssen Sie den Rahmen selbst einstellen. Der Ursprung ist in der oberen rechten Ecke (am oberen Ende der Statusleiste). Sie möchten Ihre Ansicht 20 Pixel nach unten verschieben.

Andere Tipps

Hier ist meine Lösung:

// adjust the frame of subview which is going to be add
self.navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.view addSubView:self.navController.view];

Es funktioniert gut für mich jetzt, viel Glück ~:)

In Interface Builder können Sie simulierte Oberflächenelemente hinzufügen, die programmatisch (wie die Statusleiste oder die Navigationsleiste) angezeigt. In Ihrem Inspektor, wählen Sie Ihre Ansicht, und gehen Sie auf die Registerkarte Attribute. Hier können Sie die Statusleiste simulieren, eine Top-Bar oder eine Bodenleiste.

Sieht aus wie Sie pushVC diesen UIViewController an der falschen Stelle nennen. Ich hatte das gleiche Problem. Es wurde gelöst durch [self.navigationController pushViewController: animated:] von viewDidLoad bewegt sich in einer früheren viewDidAppear: in Hierarchie UIViewController.

Jedes Mal, wenn eine seltsame Lücke erscheint, oder die Ansicht teilweise hinter der Statusleiste versteckt, es hat etwas mit entweder zu tun hat

  1. shouldAutorotate Definition in Ihrem Root-Controller - nicht sicher, ob es ein Fehler ist oder nicht, sondern versuchen, mit der Rückkehr dieser Funktion zu bleiben konsistent für alle Teilviewcontrollers (in der Regel führt zu einem Viewcontroller hinter der Statusleiste ausgeblendet wird)
  2. a wantsFullscreen Definition eines subview - auf NO, wenn möglich

ich hatten beide Fehler in meiner app und gelöst sie! Hoffe ich konnte dir etwas Zeit sparen (ich viel auf sie verschwendet)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top