UINavigationController barstyle属性更改布局

我有一个模态视图控制器,显示导航控制器。 导航控制器依次具有常规UIViewController作为其根视图控制器。 上面提到的UIViewController唯一的UI元素是UISwitch。

现在问题是:当我更改导航控制器的barStyle属性时,UIViewController内UISwitch的布局会发生变化。 这就是我所说的:

如果我没有设置barStyle属性,这是我得到的:

http://img535.imageshack.us/img535/2281/plaini.png

UISwitch现在处于“受到重视”的地方。

现在,如果我设置barStyle属性,

navController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

请注意,UISwitch位于导航栏后面:

http://img853.imageshack.us/img853/2377/blackya.png

这是UIViewController中UISwitch的代码:

 - (void)viewDidLoad { UISwitch* mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(20, 20, 100, 100)]; [self.view addSubview:mySwitch]; [mySwitch release]; } 

有人可以帮我理解发生了什么吗?

当您使用UIBarStyleBlackTranslucent(实际上已弃用)属性时,Frame会移动,因为它假定您希望视图位于下方

Apple文档说要使用以下内容,因为不推荐使用UIBarStyleBlackTranslucent:

 navController.navigationBar.barStyle = UIBarStyleBlack; navController.navigationBar.translucent = YES; 

您可以尝试将视图移回正确的位置或尝试使用以下内容:

 navController.navigationBar.tintColor = [UIColor blackColor]; navController.navigationBar.translucent = YES;