iOS:在自定义导航栏中定位导航栏按钮

时间:2011-05-29 18:09:00

标签: iphone ios uinavigationcontroller uinavigationbar frontend

我正在使用自定义导航栏构建应用。经过一些研究后,我决定使用UINavigationBar上的类别来做这件事。导航栏需要比平时稍大一点才能容纳投影。这是代码:

#import "UINavigationBar+CustomWithShadow.h"

@implementation UINavigationBar (CustomWithShadow)

- (void)drawRect:(CGRect)rect {

    // Change the tint color in order to change color of buttons
    UIColor *color = [UIColor colorWithHue:0.0 saturation:0.0 brightness:0.0 alpha:0.0];
    self.tintColor = color;

    // Add a custom background image to the navigation bar 
    UIImage *image = [UIImage imageNamed:@"NavBar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, 60)];
}

- (void)layoutSubviews {

    self.frame = CGRectMake(0, 20, self.frame.size.width, 60);
}
@end

现在唯一的问题是较大的导航栏意味着导航栏按钮结束得太远,如下所示:

enter image description here

有谁知道如何纠正按钮的位置?

感谢您的帮助!

更新

我在视图控制器的init方法中将按钮添加到导航栏,如下所示:

// Create "Add" button for the nav bar
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
    target:self 
    action:@selector(createNewEntry:)];
[[self navigationItem] setRightBarButtonItem:addButton];
[addButton release];

3 个答案:

答案 0 :(得分:3)

您需要将leftBarButtonItem和rightBarButtonItem添加为自定义项并将其弄乱....例如:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0,5,buttonImage.size.width,buttonImage.size.height)];
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[button addTarget:delegate action:@selector(barButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:titleString forState:UIControlStateNormal];
[button setTitleColor:CUSTOM_BAR_BUTTON_TITLE_COLOR forState:UIControlStateNormal];
[[button titleLabel] setFont:[UIFont boldSystemFontOfSize:14]];
[[button titleLabel] setShadowColor:CUSTOM_BAR_BUTTON_SHADOW_COLOR];
[[button titleLabel] setShadowOffset:CGSizeMake(0,-1)];

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
[button release];

[[self navigationItem] setRightBarButtonItem:barButton];
[barButton release];

答案 1 :(得分:0)

尝试在视图控制器的viewDidLoad方法中将按钮添加到导航栏。

答案 2 :(得分:0)

我的解决方案,不是最好的,但它对我很有用。我的自定义导航栏高度为55(默认高度为44)。我从自定义导航栏中剪切了44个高度并将其插入导航栏。然后我剪切我的自定义导航栏的下一部分(阴影等)并将其作为图像视图插入导航栏下方。就是这样。按钮位于正确的位置......