Frage an xib, window, xcode, uiview, iphone – Ich bin nicht sicher, warum UIView um etwa 10px angestupst wird

10

Ich habe eine einfache iPhone-App mit zwei .xib-Dateien erstellt. In der App, in der der Delegierte bei der Anwendung den Start beendet hat, zeige ich die erste .xib-Datei an, indem ich aufrufe:

<code>[window addSubview:myView];
</code>

und ich mache dasselbe auf einer IBAction für einen UIButton, um die Ansicht auf myView2 zu ändern.

Was ich finde ist, dass es einen weißen Balken von ungefähr 10 Pixel gibt, wenn ich die App für beide Ansichten starte. Mir fällt auch auf, dass die Buttons um ca. 10 Pixel versetzt sind. So habe ich den Eindruck, dass die Ansicht ab 10 Pixel vom Bildschirm angezeigt wird und kurz endet.

Gibt es eine Idee, warum dies passieren könnte, wie ich es beheben oder wie ich das weitere Debuggen durchführen kann? Ich habe meine .xib-Dateien überprüft und sie verbrauchen die gesamte Höhe des Geräts (d. H. Keine weißen Balken). Dies scheint also ein Problem in XCode zu sein.

EDIT: Ich habe das Problem ein wenig eingegrenzt. Ich benutze zwei Methoden, um die Unteransicht zu laden. Wenn ich den ersten Blick hineinladeapplicationDidFinishLaunching alles ist gut. Allerdings ersetze ich die beiden Nachrichten umwindow mit dem[self originalView] Methode, dann geht alles ein bisschen drunter und drüber.

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

}
</code>

Soweit ich sehen kann, rufe ich immer die gleichen Codezeilen auf, egal ob in derapplicationDidFinishLaunching oder in[self originalView] aber es scheint sowindow stellt sich als ein anderes Objekt heraus.

Deine Antwort

5   die antwort
12

Push auf einem UINavigationController), passt es den Rahmen seiner Ansicht an.

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

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

hinter der Statusleiste verborgen ist, hat dies auch etwas damit zu tun

shouldAutorotate-Definition in Ihrem Root-Controller - nicht sicher, ob es sich um einen Fehler handelt oder nicht, aber versuchen Sie, mit der Rückgabe dieser Funktion für alle Sub-Viewcontroller konsistent zu bleiben (normalerweise wird ein Viewcontroller hinter der Statusleiste ausgeblendet)eine wantsFullscreen-Definition einer Unteransicht - wenn möglich auf NO setzen

Ich hatte beide Fehler in meiner App und löste sie! Hoffe, ich könnte dir etwas Zeit sparen (ich habe viel dafür verschwendet)

5

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

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

1

Sieht aus wie Sie PushVC dazu aufrufenUIViewController am falschen Ort. Ich hatte das gleiche problem Es wurde durch Umzug gelöst[self.navigationController pushViewController: animated:] vonviewDidLoad zuviewDidAppear: in einem früherenUIViewController in der Hierarchie.

2

en, die programmgesteuert 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.

Verwandte Fragen