导航条UIBarButtonItem添加图片,如何避免渲染

今天在学swift的时候发现的这个方法(表脸啊,明明是一起学swift的小伙伴先发现的啊),只需要一句代码(看看下面的这些代码,真是又忧伤又喜悦)

UIImage *image = [[UIImage imageNamed:@"lt_ic_my"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[btn setImage:image forState:UIControlStateNormal] ;
关键在 imageWithRenderingMode这个方法,看Apple注释
// Create a version of this image with the specified rendering mode. By default, images have a rendering mode of UIImageRenderingModeAutomatic.
- (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingMode NS_AVAILABLE_IOS(7_0);

大意是用指定的渲染模式创建image对象。默认情况下,图像的渲染模式uiimagerenderingmodeautomatic,我们需要的是UIImageRenderingModeAlwaysOriginal

讲真,我会一辈子记住这句代码...

====================================================================================================================================

今天做项目时碰到的需求:

导航条的leftBarButtonItem需要做一个未读提醒,效果如图所示:

贴心的UI妹子也给切图了,有未读一套图,读完另外一套。

熟悉导航条的都知道,导航条有个tintColor属性,当你不设置时恒为蓝色,而设置了就恒为你设置的颜色(例:白色),然后搞了半天,我就有些崩溃,以我的水平真的是没找到利用导航条属性来倔强的用UI妹子图的方法。

在下输了,于是发挥了中国人迂回解决问题的方法,舍弃UI妹子,单独创建一个Button来显示未读小红点,代码如下:

- (UIView *)myView {
    if (!_myView) {
        _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)];
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [btn setAdjustsImageWhenHighlighted:NO];
        [btn addTarget:self action:@selector(enterPersonInfoPage) forControlEvents:UIControlEventTouchUpInside];
        [_myView addSubview:btn];
        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0));
        }];
        [btn setImage:[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal];
        
        UIButton *unreadBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        self.unreadBtn = unreadBtn;
        [_myView addSubview:unreadBtn];
        [unreadBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(_myView).offset(3);
            make.right.equalTo(_myView).insets(UIEdgeInsetsZero);
            make.height.equalTo(8);
            make.width.equalTo(8);
        }];
    }
    return _myView;
}

设置导航条时直接:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.myView];

当有未读消息时:

[self.unreadBtn setImage:[UIImage imageNamed:@"unread"] forState:UIControlStateNormal];
没有时:

[self.unreadBtn setImage:nil forState:UIControlStateNormal];

今天又找到一个方法:

在放图片的button下方放一个透明的button,代码如下:

- (UIView *)myView {
    if (!_myView) {
        _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)];
        
        UIButton *clearBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [clearBtn setAdjustsImageWhenHighlighted:NO];
        [_myView addSubview:clearBtn];
        [clearBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0));
        }];
        
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [btn setAdjustsImageWhenHighlighted:NO];
        [btn addTarget:self action:@selector(enterPersonInfoPage) forControlEvents:UIControlEventTouchUpInside];
        [_myView addSubview:btn];
        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(_myView).insets(UIEdgeInsetsMake(0, 0, 0, 0));
        }];
        [btn setImage:[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal];
        self.myBtn = btn;
    }
    return _myView;
}

当有未读消息时:

[self.myBtn setImage:[UIImage imageNamed:@"lt_ic_my_unread"] forState:UIControlStateNormal];

没有时:

[UIImage imageNamed:@"lt_ic_my"] forState:UIControlStateNormal];

原因是导航条与放置图片的button中间隔了一层button,导航条tintColor渲染不到了,大概吧,原因找到了再贴。


至此,小马述一家之言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
下面是用视图方式说明 iOS 导航条的步骤: 1. 创建导航条视图 在 iOS 应用程序中,导航条通常是一个视图控件,可以通过创建一个 `UINavigationBar` 实例来创建导航条视图。例如,可以在视图控制器的 `viewDidLoad` 方法中添加以下代码来创建导航条: ``` UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)]; [self.view addSubview:navigationBar]; ``` 这段代码创建了一个高度为 44 点的导航条,并将其添加到视图控制器的视图中。 2. 创建导航项和导航按钮 导航条通常包含一个或多个导航项,每个导航项表示一个视图控制器。要创建一个导航项,可以使用 `UINavigationItem` 类。例如,下面的代码创建了一个标题为 "Home" 的导航项,并将其添加导航条中: ``` UINavigationItem *homeNavItem = [[UINavigationItem alloc] initWithTitle:@"Home"]; [navigationBar pushNavigationItem:homeNavItem animated:NO]; ``` 此外,导航条通常还包含一个或多个导航按钮,用于在不同的视图控制器之间进行导航。要创建一个导航按钮,可以使用 `UIBarButtonItem` 类。例如,下面的代码创建了一个标题为 "Back" 的导航按钮,并将其添加到导航项的左侧: ``` UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)]; homeNavItem.leftBarButtonItem = backButton; ``` 该代码将 `backButton` 对象设置为导航项的左侧按钮,并指定了按钮标题、样式、目标和操作。当用户按下该按钮时,将调用 `backButtonPressed` 方法。 3. 处理导航按钮点击事件 当用户按下导航按钮时,需要响应相应的事件并导航到相应的视图控制器。在上面的示例中,当用户按下 "Back" 按钮时,将调用 `backButtonPressed` 方法。实现该方法的代码如下: ``` - (void)backButtonPressed { [self.navigationController popViewControllerAnimated:YES]; } ``` 该代码使用导航控制器的 `popViewControllerAnimated:` 方法来从导航堆栈中弹出当前视图控制器,并返回到上一个视图控制器。如果没有上一个视图控制器,则返回到应用程序的根视图控制器。 这些步骤可以帮助你创建和使用 iOS 导航条视图,并处理相应的导航按钮点击事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值