2011-11-14 51 views
0

自定义导航栏上的后退按钮在iPad上显示为一半,它在iPhone上正常显示。应用程序只支持肖像模式。后退按钮在自定义导航栏上显示一半iPad

enter image description here

源代码,

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
if (isPad) { 
    backButton.frame = CGRectMake(0, 0, 120, 70); 
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed-iPad_120X70.png"] forState:UIControlStateNormal]; 
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed-iPad_120X70.png"] forState:UIControlStateHighlighted]; 
}else{ 
    backButton.frame = CGRectMake(0, 0, 60, 35); 
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed.png"] forState:UIControlStateNormal]; 
    [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed.png"] forState:UIControlStateHighlighted]; 
} 

[backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
self.navigationItem.leftBarButtonItem = buttonItem; 
[buttonItem release]; buttonItem = nil; 

请帮助。

+0

当你设置'会发生什么backButton.frame = CGRectMake( 0,10,60,35)'? I.E.将X&Y参数更改为初始按钮框架, –

+0

@MichaelDautermann:我也试过,但它没有做任何改变。如果你改变它,唯一改变的是它的高度和宽度。 – SST

回答

0

我解决了这个问题,在这里张贴的细节,因此它可能是帮助他人

 
1] created a UIButton, with custom image. 
2] created a UIView, which will fit properly on UINavigationbar. 
3] added UIButton on UIView. 
4] created UIBarButtonItem with custom view. 

这里是代码,

 
    if (isPad) { 
     UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 200, 200)]; 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     backButton.frame = CGRectMake(0, 90, 120, 70); 
     [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed-iPad_120X70.png"] forState:UIControlStateNormal]; 
     [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed-iPad_120X70.png"] forState:UIControlStateHighlighted]; 
     [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [customView addSubview:backButton]; 

     UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:customView]; 
     self.navigationItem.leftBarButtonItem = buttonItem; 
     [customView release]; customView = nil; 
     [buttonItem release]; buttonItem = nil; 
    }else{ 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     backButton.frame = CGRectMake(0, 0, 60, 35); 
     [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonUnpressed.png"] forState:UIControlStateNormal]; 
     [backButton setBackgroundImage:[UIImage imageNamed:@"BackButtonPressed.png"] forState:UIControlStateHighlighted]; 
     [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
     self.navigationItem.leftBarButtonItem = buttonItem; 
     [buttonItem release]; 
     buttonItem = nil; 
    } 
0

Ahhh,我只是意识到你正在试图通过一个初期的UIView而不是一个控件来将UIButton控件强制转换为UIBarButtonItem。

不要那样做!

为什么不只是通过创建栏按钮项目:

UIBarButtonItem * buttonItem = 
    [[UIBarButtonItem alloc] initWithTitle: @"Back" 
            style: UIBarButtonItemStyleDone 
            target: self 
            action: @selector(backButtonPressed:); 

而让O.S.处理适当的突出显示(如果有的话)。

+0

实际上我有一个自定义导航栏,所以默认的UIBarButtonItem不会很好看。 – SST