如何让UIBarButtonItem同时显示图片和文字

我们无法在storyboard里,为UIBarButtonItem设置图片+文字,但在代码里,我们可以实现。

  1. 自定义一个控件,用于初始化UIBarButtonItem

这里我们只需简单创建一个带图片+文字的UIButton即可,以下示例代码都写在viewDidLoad方法内:

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.backgroundColor = [UIColor grayColor]; //加上背景颜色,方便观察Button的大小
    
    //设置图片
    UIImage *imageForButton = [UIImage imageNamed:@"oicon_01"];
    [button setImage:imageForButton forState:UIControlStateNormal];
    
    //设置文字
    NSString *buttonTitleStr = @"Hello!!!";
    [button setTitle:buttonTitleStr forState:UIControlStateNormal];
    button.titleLabel.font = [UIFont systemFontOfSize:15];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
       
    button.frame = CGRectMake(0, 0 , 100, 100);   //#1#硬编码设置UIButton位置、大小

2.使用我们的自定义控件创建UIbarButtonItem

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

3.设置NavigationController的navigationItem

self.navigationItem.leftBarButtonItem = barButtonItem;

运行程序后效果如下:

可以看到代码中设置Button的尺寸,明显比容纳图片和文字所需的实际尺寸大得多。你也可以通过不断修改数字、运行程序查看效果的方式找到最佳尺寸。但这里我们有更灵活的方式。

按钮的宽 = 图片的宽+文字的宽;

按钮的高 = 图片的高;

将注释#1#的代码替换为以下代码:

CGSize buttonTitleLabelSize = [buttonTitleStr sizeWithAttributes:@{NSFontAttributeName:button.titleLabel.font}]; //文本尺寸
    CGSize buttonImageSize = imageForButton.size;   //图片尺寸
    button.frame = CGRectMake(0,0,
                              buttonImageSize.width + buttonTitleLabelSize.width,
                              buttonImageSize.height);

运行效果如下:

时间: 2024-10-24 17:17:42

如何让UIBarButtonItem同时显示图片和文字的相关文章

UIButton上同时显示图片和文字的方法

参考:http://blog.csdn.net/qijianli/article/details/8152726 不过有个问题,就是我使用时不能改变文字的颜色,后来修改了一下方法,如下: 定义一个UIButton+Manager文件,在.h #import <UIKit/UIKit.h> @interface UIButton (UIButtonImageWithLable) - (void) setImage:(UIImage *)image withTitle:(NSString *)ti

android之ListView和adapter配合显示图片和文字列表

listView页面布局:layout/activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_hei

listview使用SimpleAdapter显示图片和文字

package com.example.listview_8; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import a

显示图片的吐司Toast

一般我们提示的时候都是直接提示文字的,其实Toast也可以显示图片 方法 Toast.makeText(context,text,duration)这返回一个Toast对象 toast.setDureation(duration)设置持续时间 toast.setGravity(gravity,xOffest,yOffset)设置Toast的位置 toast.setText(s);设置内容 toast.show()显示内容 toast.setView(View v) 例子 1.只显示图片的Toas

Chrome 控制台新玩法-console显示图片以及为文字加样式

有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.log()方法外还可以调用 cosole.warn() 来输出警告信息,在控制台中出来的效果如下: 在输出信息前面会有一个带感叹号的黄色三角警告符号.似乎比一般的console信息要友好得多了.虽然图标是黄色的,但输出的文字仍然是黑色. 另外经常用到的是输出错误信息.可以通过调用console.erro

iOS View自定义窍门——UIButton实现上显示图片,下显示文字

"UIButton实现上显示图片,下显示文字"这个需求相信大家在开发中都或多或少会遇见.比如自定义分享View的时候.当然,也可以封装一个item,上边imageView,下边一个label.但是既然有现成的,稍微改造下,设置下就可以,干嘛还要重复造轮子.有时候好多东西不是他们没有给设置,而是暂时没找到如何设置的方法而已. 示例 1. 一开始我的方案 自定义类继承UIButton,然后 -(void)layoutSubviews { [super layoutSubviews]; CG

CSS控制图片和文字在同一行显示且对齐的3种方法

CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中,有时会需要在文字旁边加上一个图标. 默认情况,是图片置顶对齐,文字置底对齐,所以通常图片高,文字低,不能水平居中对齐. 常见方法有3种:1.通过添加css的“vertical-align:middle;”:2.如果图片是背景图片,可以在css中设置背景图片:3.把文字和图片分别放入不同的div中.上面三种方法都可以让图片和文字在同一行显示,下面我们用实例来应用一下. 1.添加上“vertical-align:middle”属

如何利用CSS代码使图片和文字在同一行显示且对齐

对于初学css的新手朋友来说,经常会遇到这样一个问题,当文字和图片出现在同一行或者同一个div里面的时候,在浏览器中运行出来的显示效果往往是在不同的行,那么,我们怎么才能利用CSS代码使图片和文字在同一行显示且对齐呢? 对于这种现象,方法有3种: 1.通过添加css的“vertical-align:middle;”: 2.如果图片是背景图片,可以在css中设置背景图片,然后设置文字的padding属性: 3.把文字和图片分别放入不同的div中. 经过多次的测试,上面三种方法都可以让图片和文字在同

CSS实现鼠标放图片上显示白色边框+文字描述

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-