2009-06-24 3 views
13

Ich habe ein seltsames Problem mit dem Hinzufügen eines UINavigationController zu meiner iPhone-Anwendung. Ich fügen Sie den Controller wie folgt:iPhone: Weird Platz an der Spitze von UINavigationController

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil]; 

myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController]; 

UIView *finalView = myeNavigationViewController.view; 

[self.view addSubview:finalView]; 

Alles scheint wie geplant zu arbeiten, außer ich einen seltsamen weißen Raum an der Spitze meiner Ansicht zwischen der Statusleiste und der UINavigationController Titelleiste erhalten. alt text http://www.andrewskinner.name/problem.png

Ich habe online gesucht, weiß aber nicht wirklich, wonach ich suchen soll. Hat jemand anderes dieses Problem? Kannst du mir in die Richtung einiger Hilfe zeigen?

Vielen Dank im Voraus.

Antwort

0

Vielleicht hast du dir doch mal zwei UIViews, mit je einer Statusleiste besorgt. Überprüfen Sie die Xib.

11

Was bedeutet die Linie

UIView *finalView = myeNavigationViewController.view; 

zum Code hinzufügen? Es ist überflüssig, da man der Ansicht hinzufügen können direkt, ohne es zu einem UIView erste Zuordnung - und es ist falsch, da es die myNavigationController und nicht Navigation verweist ..
Ich neige dazu, diese

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];  
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController]; 
[navigationController.view setFrame: [self.view bounds]]; 
navigationController.delegate = self; 
[self.view addSubview:[navigationController view]]; 

Einstellen des Rahmens an den Grenzen zu tun entfernt auch den Leerraum an der Oberseite, nach der Sie gefragt haben.

2

Das Problem ist, dass UINavigationController sollte idealerweise die direkte Subview UIWindow sein. Es wird Position und Größe von selbst bestimmen. Wenn Sie UINavigationController einer anderen benutzerdefinierten Ansicht einer UIWindow-Unteransicht hinzufügen, müssen Sie auf die Position und Größe dieser benutzerdefinierten Ansicht achten, indem Sie berücksichtigen, ob die Statusleiste im UIWindow angezeigt wird oder nicht.

Mein Vorschlag ist, die benutzerdefinierte Ansicht als Unterklasse von UINavigationController zu machen:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ]; 

[myUIWindow addSubview:nav.view]; 

und innerhalb des mySubClass_NavigationController, Sie alle Anpassungen vornehmen können, die Sie jetzt in Ihrem Selbst tun (was immer das Controller) .

2

Ich kämpfte mit dieser für eine Weile auch mit sehr ähnlichen Code zu den op's und hatte auch einen weißen Balken über meinem Navigationscontroller.

Mein Problem trat auf, wenn der UINavigationController als Ansicht in einem UITabController hinzugefügt wurde. Der Space in meinem Fall wurde durch den UINavigationBar-Teil des UINavigationControllers verursacht, der die Statusleiste berücksichtigte und tatsächlich einen Teil der View überlappte, die ich im UINavigationController anzeigen wollte.

Dies ist der Code, den ich in loadView in einem meiner UITabBarController View-Controller endete.

SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init]; 

UINavigationController *navController = [[UINavigationController alloc] 
             initWithRootViewController:screenList]; 

CGRect frame = [[navController navigationBar] frame]; 

frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar. 

[[navController navigationBar] setFrame:frame]; 

[self setView:[navController view]]; 

Es gibt weitere Informationen unter http://discussions.apple.com/message.jspa?messageID=7890362.

1

Es gibt eine obskure Eigenschaft in IB namens "Hides Bottom Bar on Push". Überprüfen Sie es einfach. Es hat das Problem für mich gelöst.