0

我想做一些我认为很简单但结果非常困难的事情!我想为我的导航控制器的导航栏和工具栏设置样式。我希望他们都有:

  1. 自定义背景图像,我知道我可以使用外观代理,但这不符合以下几点的要求。
  2. 导航栏和工具栏应该与我为它们设置的背景图像高度相同。我试过设置框架高度,但没有用。
  3. 最后,我想向导航栏和工具栏添加一些按钮(具有特定的高度和宽度,而不是固定/标准),但我希望工具栏/导航的行为就像 UIView。

如何实现这三点?谢谢!

4

2 回答 2

1

我想添加一个更好的解决方案(在我看来):为 UINavigationBar 和 UIToolbar 添加一个类别,例如:

UINavigationBar+myNavBar.m

#import "UINavigationBar+myNavBar.h"

@implementation UINavigationBar (myNavBar)
- (CGSize)sizeThatFits:(CGSize)size {
    UIImage *header = [UIImage imageNamed:@"Images/backgrounds/header"];
    CGSize newSize = CGSizeMake(header.size.width,header.size.height);
    return newSize;
}
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed:@"Images/backgrounds/header"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

UINavigationBar+myNavBar.h

#import <UIKit/UIKit.h>

@interface UINavigationBar (myNavBar)
- (CGSize)sizeThatFits:(CGSize)size;
@end

UIToolbar 的解决方案几乎完全相同。

于 2012-07-14T15:41:26.100 回答
0

我为此所做的是创建看起来与内置导航栏完全相同的图像。我还创建了一个与默认按钮非常接近的后退按钮。你当然可以为所欲为。这确实花费了相当多的时间,但是一旦你这样做了,你就可以将它们作为 UIImageView 和 UIButton 加载到你的应用程序中。非常简单。并且完全可定制。

- (void) viewDidLoad {

    UIView *navBarView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,44)];

    UIImageView *navBarImg = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,44)];
    [navBarImg setImage:[UIImage imageNamed:@"navigationBarImage"]]; // the name of the .png file you made
    [navBarView addSubview:navBarImg];

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [backButton setBackgroundImage:[UIImage imageNamed:@"backButtonNormal"] forState:UIControlStateNormal];
    [backButton setBackgroundImage:[UIImage imageNamed:@"backButtonHighlighted"] forState:UIControlStateHighlighted];
    [backButton setFrame:CGRectMake(5,5,40,35)]; //Depends on how you do your button
    [backButton addTarget:self action:@selector(backButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [navBarView addSubview:backButton];

    //Repeat for any other buttons you wish to add. 

    [self.view addSubview:navBarView];
}

- (IBAction) backButtonPressed:(id)sender {
   [self.navigationController popViewControllerAnimated:YES];
}


//Pushing VC's
// I usually make a declared property for the VC and then:
- (IBAction) visitNextVC {
   NextVC *_nextVC = [[NextVC alloc] initWithNibName:@"NextVC" bundle:nil];
   [self setNextVC:_nextVC];
   [self.navigationController pushViewController:nextVC animated:YES];
}
于 2012-07-09T22:39:53.380 回答