码迷,mamicode.com
首页 > 其他好文 > 详细

实习小结——UIBarButtonItem和UINavigationBar的坑

时间:2015-08-09 12:37:46      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:uibarbutto   navigation   颜色   自定义   位置   

这一周做了很多UI方面的东西,遇到的坑主要集中在UIBarButtonItem和UINavigationBar,记录一下备查。

UIBarButtonItem自定义位置

直接用系统默认的方式生成按钮是无法选择位置的,甚至连这个按钮的默认位置都不清楚。如果想要自定义按钮的位置,有两种选择。

一、直接修改系统生成的按钮。

可以通过UIBarButtonItem的imageInsets属性,修改图片的位置,从而间接的修改按钮位置。代码如下:

UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithImage:image imageWithRenderingMode:mode style:UIBarButtonItemStylePlain target:self action:xxx];
rightItem.imageInsets = UIEdgeInsetsMake(-4, 0, 0, 0);
self.navigationItem.rightBarButtonItem = rightItem;

为了突出重点,第一行生成rightItem的代码做了一些简化处理,不用过于关注。UIEdgeInsetsMake方法分别在上、左、下、右四个方向规定了图片的伸缩量。

二、完全自定义按钮。

通过UIBarButtonItem的customView属性,可以实现按钮的完全自定义。就不具体写代码了。

两种方法的比较:
代码简洁性:显然第一种方式更简单清晰,如果只是要简单的移动位置,推荐第一种方式。

UI美观性:由于第一种方法用到了系统默认的UIBarButtonItem,它在高亮状态下是呈现透明的。而第二种方法需要自定义UIButton,默认高亮状态下变灰。个人认为第一种方式更美一些。当然通过自定义UIButton,也可以达到同样的效果,不过代码会更加复杂。

动画效果:我在项目中遇到了一个需求,当主页面的tableview向下滑动的时候,navigationBar上的按钮逐渐淡出消失(alpha从1到0)。这种情况下,由于UIBarButtonItem并不继承自UIView,所以是不可能实现的。因此必须选择第二种方法。

所以,除非必须高度自定义,否则尽量选择代码代码简单的第一种实现方式即可。

修改Cell选中时的背景颜色

系统的tableview的cell,在选中装下变灰。美工觉得灰色太深了,需要自定义选中是的颜色。在不使用自定义UITableViewCell的情况下,可以利用cell的cell.selectedBackgroundView属性实现效果。代码如下:

UIColor *cellBackgroundColor = kColorFromRGBA(0, 0, 0, 0.02);
cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
cell.selectedBackgroundView.backgroundColor = cellBackgroundColor;

ios7及以后,是通过navigationBar的barTintColor来修改颜色的。tintColor属性好像不能修改了。

不过在处理MFMailComposeViewController的时候,还是遇到了bug。这个ViewController是系统自带的,用于发送反馈邮件的ViewController。但是好像对它修改navigationBar颜色的代码一直无效。查阅了很多资料后发现一种可行的解决方案。

一定要确保修改navigationBar颜色的代码在创建MFMailComposeViewController对象之前调用。因此可以修改全局的navigationBar颜色。最后再在自己这个类的viewWillAppear方法中,把颜色改回来即可。

//这是需要创建MFMailComposeViewController的ViewController的.m文件
//关键在于创建mailPicker之前先改全局的navigationBar的颜色,记得在viewWillAppear方法中改回来。

[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
mailPicker.mailComposeDelegate = self;

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UINavigationBar appearance] setBarTintColor:oldColor];
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

实习小结——UIBarButtonItem和UINavigationBar的坑

标签:uibarbutto   navigation   颜色   自定义   位置   

原文地址:http://blog.csdn.net/abc649395594/article/details/47374393

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!