2009-06-28 3 views
10

stupste up ist Ich habe ein einfaches iPhone App erstellt, die zwei .xib Dateien haben. Im AppDelegate bei Anwendung beenden Start habe ich die erste Anzeige .xib Datei durch den Aufruf:nicht sicher, warum ist UIView von rund 10px

[window addSubview:myView]; 

und ich das gleiche tun auf einem IBAction für eine UIButton die Ansicht myView2 zu ändern.

Was ich finde ist, dass es einen weißen Balken von etwa 10 Pixel gibt, wenn ich die App für beide Ansichten ausführen. Ich merke auch, dass die Tasten um 10 Pixel (ca.) versetzt sind. So habe ich den Eindruck, dass die Ansicht aus 10 Pixel Entfernung vom Bildschirm angezeigt wird und kurz endet.

Irgendeine Idee, warum das passieren könnte, wie ich es beheben kann, oder wie ich weiter debuggen kann, was los ist? Ich habe meine .xib-Dateien überprüft und sie verbrauchen die volle Höhe des Geräts (d. H. Keine weißen Balken), so dass dies ein Problem in XCode zu sein scheint.

EDIT: Ich habe das Problem ein wenig verengt. Ich verwende zwei Methoden, um die Unteransicht zu laden. Wenn ich die erste Ansicht innerhalb applicationDidFinishLaunching lade, ist alles in Ordnung. Allerdings, wenn ich die beiden Nachrichten zu 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, bin ich immer die gleichen Zeilen Code aufrufen, egal ob es innerhalb des applicationDidFinishLaunching oder in [self originalView] ist, aber es scheint, wie window erweist sich ein anderes Objekt sein.

Antwort

12

Wenn Sie einen UIViewController auf normale Weise verwenden (d. H. pushing it on a UINavigationController), wird der Rahmen der Ansicht angepasst.

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

+0

Alle Beispiele, die ich gesehen habe, verwenden UINavigationController, um eine Hierarchie von Listen anzuzeigen, ist es das, wofür es nur verwendet wird? Oder kann ich damit steuern, welche Ansichten angezeigt werden, auch wenn sie keine Navigationsleiste usw. benötigen? –

2

Im Interface Builder können Sie Simulierte Schnittstellenelemente hinzufügen, die programmatisch angezeigt werden (z. B. die Statusleiste oder die Navigationsleiste). Wählen Sie in Ihrem Inspektor Ihre Ansicht aus, und wechseln Sie zur Registerkarte Attribute. Hier können Sie die Statusleiste, eine obere Leiste oder eine untere Leiste simulieren.

5

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 ~ :)

1

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

1

Jedes Mal, wenn eine seltsame Lücke erscheint, oder die Ansicht teilweise hinter der Statusleiste versteckt, es hat etwas mit entweder in Ihrem Root-Controller

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

ich hatte bot h Bugs in meiner App und löste sie! Ich hoffe, ich könnte Ihnen etwas Zeit sparen (ich verschwendete viel davon)

Verwandte Themen