咨询时一个ui bar button ten,设置图片后文字没了。
用代码创建控制器:新建购彩大厅的控制器ILHallViewController继承UIViewController
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:[UIButton buttonWithType:UIButtonTypeContactAdd]];
self.navigationItem.rightBarButtonItem = barItem;
或者拖一个uibutton上去,拖一个view controller选中该button非BarButtonItem,按住controller键push连过去
把tabbar去掉:
,隐藏的系统自带的。删除代码
// 移除自带的tabBar,removeFromSuperview不会马上销毁,等该函数结束后才销毁
[self.tabBar removeFromSuperview];
修改tabBar.frame = self.tabBar.frame;为
tabBar.frame = self.tabBar.bounds;
修改[self.view addSubview:tabBar];,为
// 因为系统自动隐藏的是系统自带的tabBar
[self.tabBar addSubview:tabBar];
拦截push方法,所有push过去的时候把tartar隐藏掉,自定义导航控制器,新建控制器ILNavigationController : UINavigationController,把导航控制器的class指定为它
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
viewController.hidesBottomBarWhenPushed = YES;
return [super pushViewController:viewController animated:animated];
}
所有导航条设为红色
获取应用所有的导航条,在ILTabBarViewController.m里
UINavigationBar *bar = [UINavigationBar appearance];//appearance是个协议
[[UIDevice currentDevice].systemVersion floatValue]>=7.0
[bar setBackgroundImage:[UIImage imageNamed:@“NavBar64”] forBarMetrics:UIBarmetricsDefault];
[bar setBackgroundImage:[UIImage imageNamed:@“NavBar”] forBarMetrics:UIBarmetricsDefault];
这样改ios6中导航条红色太宽了控制器从导航条下开始,ios7中把控制器的20点占用了44+20。控制器从最上开始
抽成宏,放在pch里,#define ios7 [[UIDevice currentDevice].systemVersion floatValue]>=7.0
设置文字白色:
NSDictionary *dict = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15] //nsfontattributename iOS6没有,用uitextattributefont
};
[bar setTitleTextAttributes:dict];
放到ILNavigationController.m的类initialize里(第一次使用这个类或者这个类的子类的时候),为什么不能放在viewdidload里:没点击下面的按钮都会调用一次
if (self == [ILNavigationController class]) { // 肯定能保证只调用一次
// 获取应用程序中所有的导航条
// 获取所有导航条外观
UINavigationBar *bar = [UINavigationBar appearance];
UIImage *navImage = nil;
if (ios7) {
navImage = [UIImage imageNamed:@"NavBar64"];
}else{
navImage = [UIImage imageNamed:@"NavBar"];
}
[bar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault];
NSDictionary *dict = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:15]
};
[bar setTitleTextAttributes:dict];
}
全部彩种,拖一个button
调节位置,麻烦。
改变按钮文字和图片的位置,创建ILTitleButton 放在view里。
在ILTitleButton.m里:
#import <Availability.h>
- (void)awakeFromNib
{
self.imageView.contentMode = UIViewContentModeCenter;//文字居中,防止填充
}
// 不能使用self.titleLabel 因为self.titleLabel内部会调用titleRectForContentRect,contentRect是按钮的bounds
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
CGFloat titleX = 0;
CGFloat titleY = 0;
NSDictionary *dict = @{
NSFontAttributeName : [UIFont systemFontOfSize:15]
};
CGFloat titleW = 0;
if (ios7) { // 判断运行时,及当前模拟器运行在哪个系统上
//根据文字内容,以字体15的大小计算长度
#ifdef __IPHONE_7_0 // 判断编译时 sdk7.0才允许编译 不能使用self.titleLabel.text
titleW = [self.currentTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine attributes:dict context:nil].size.width;
#else // sdk 6.0 编译下面
titleW = [self.currentTitle sizeWithFont:[UIFont systemFontOfSize:15]].width;
#endif
}else{
titleW = [self.currentTitle sizeWithFont:[UIFont systemFontOfSize:15]].width;
}
CGFloat titleH = contentRect.size.height;
return CGRectMake(titleX, titleY, titleW, titleH);
}
- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
CGFloat imageW = 30;
CGFloat imageH = contentRect.size.height;
CGFloat imageX = contentRect.size.width - imageW;
CGFloat imageY = 0;
return CGRectMake(imageX, imageY, imageW, imageH);
}
ps:
六种定义button类型:
UIButtonTypeCustom = 0, 无类型
UIButtonTypeRoundedRect, 四个角是圆弧 型的
UIButtonTypeDetailDisclosure
UIButtonTypeInfoLight
UIButtonTypeInfoDark
UIButtonTypeContactAdd