我正在尝试创建我的UINavigationBar的自定义外观。当用户将应用程序置于横向时,应使用图像覆盖navigationBar。当旋转回到肖像时,我希望删除视图(图像)。除了删除它之外,下面的代码一切正常。如果我将代码放在同一个if语句中,我可以删除View,但是如果我将它放在else if语句中则没有任何反应。我错过了什么吗? /问候
- (void) adjustViewsForOrientation:(UIInterfaceOrientation) orientation {
UIView *v = [[UIView alloc]init];
if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
v.frame = CGRectMake(0,0,480,44);
v.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"navbar25g.png"]];
[self.view addSubview:v];
//[v removeFromSuperview]; <----- works if I put it here
NSLog(@"LANDSCAPE");//load the landscape view
}
else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
{
[v removeFromSuperview]; <----- Not working
NSLog(@"PORTRAIT"); //load the portrait view
}
}
答案 0 :(得分:1)
无法删除它的原因是每次进入方法时都会创建UIView * v的新实例。
创建一个实例变量,然后将视图分配给该实例。分配完成后,您可以根据需要删除或添加。
如果您不想使用实例变量,则可以为视图提供标签,即
UIView *v = nil;
v = [self.view viewForTag:1000];
if (!v) {
v = [[UIView alloc] init];
v.tag = 1000;
v.frame = CGRectMake(0, 0, 480, 44);
v.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"navbar25g.png"]];
}
现在,您可以为其添加和删除。
答案 1 :(得分:0)
你试过UIAppearance吗?
[[UINavigationBar appearance] setBackgroundImage:nil barMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:image barMetrics:UIBarMetricsLandscapePhone];