能添加图标的label

效果

源码

https://github.com/YouXianMing/UI-Component-Collection 中的 IconEdgeInsetsLabel

//
//  IconEdgeInsetsLabel.h
//  EdgeInsetLabel
//
//  Created by YouXianMing on 16/6/22.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum : NSUInteger {

    kIconAtLeft,
    kIconAtRight,

} EIconEdgeDirection;

@interface IconEdgeInsetsLabel : UILabel

@property (nonatomic, strong) UIView             *iconView;
@property (nonatomic)         UIEdgeInsets        edgeInsets;
@property (nonatomic)         EIconEdgeDirection  direction;
@property (nonatomic)         CGFloat             gap;

- (void)sizeToFitWithText:(NSString *)text;

@end
//
//  IconEdgeInsetsLabel.m
//  EdgeInsetLabel
//
//  Created by YouXianMing on 16/6/22.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "IconEdgeInsetsLabel.h"
#import "UIView+SetRect.h"

@interface IconEdgeInsetsLabel ()

@property (nonatomic, weak) UIView  *oldIconView;

@end

@implementation IconEdgeInsetsLabel

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {

    UIEdgeInsets insets = self.edgeInsets;

    CGRect rect = [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets) limitedToNumberOfLines:numberOfLines];

    rect.origin.x    -= insets.left;
    rect.origin.y    -= insets.top;
    rect.size.height += (insets.top + insets.bottom);
    _iconView && [_iconView isKindOfClass:[UIView class]] ?
    (rect.size.width += (insets.left + insets.right + _gap + _iconView.frame.size.width)) :
    (rect.size.width += (insets.left + insets.right));

    return rect;
}

- (void)drawTextInRect:(CGRect)rect {

    UIEdgeInsets insets = self.edgeInsets;

    if (self.iconView) {

        if (self.direction == kIconAtLeft) {

            _iconView.left    = insets.left;
            _iconView.centerY = self.middleY;
            insets = UIEdgeInsetsMake(insets.top, insets.left + _gap + _iconView.frame.size.width, insets.bottom, insets.right);

        } else if (self.direction == kIconAtRight) {

            _iconView.right   = self.width - insets.right;
            _iconView.centerY = self.middleY;
            insets = UIEdgeInsetsMake(insets.top, insets.left, insets.bottom, insets.right  + _gap + _iconView.frame.size.width);
        }
    }

    [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
}

- (void)sizeToFitWithText:(NSString *)text {

    self.text = text;
    [self sizeToFit];
}

#pragma mark - setter & getter.

@synthesize iconView = _iconView;

- (void)setIconView:(UIView *)iconView {

    _oldIconView && [_oldIconView isKindOfClass:[UIView class]] ? ([_oldIconView removeFromSuperview]) : 0;

    _iconView    = iconView;
    _oldIconView = iconView;
    iconView.x   = 0.f;
    iconView.y   = 0.f;

    [self addSubview:iconView];
}

- (UIView *)iconView {

    return _iconView;
}

@end

细节

1. 继承自UILabel

2. 重载了UILabel的两个方法

时间: 2024-10-12 09:07:25

能添加图标的label的相关文章

WPF 带CheckBox、图标的TreeView

WPF 带CheckBox.图标的TreeView 在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提供强大的ItemTemplate模板功能和自定义样式,那我们可以自己写一个这样的控件供自己使用. 我自己写的这个比较简单. 首先写一个供TreeView使用的数据模型,并且实现INotifyPropertyChanged接口,用于向客户端(通常是执行绑定的客户端)发出某一属性值已更改的通知,当属性改

百度地图API多个点聚合时,标注添加的标签label地图刷新就丢失的问题解决

当将自定义的Marker(含有Label)通过MarkerClusterer 管理的时候,当地图发生任何移动.缩放 的时候,Marker 的Label 就会自动消失. 这个问题主要是由于百度的点聚合API<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></scrip

[Android 成长之路]2-实现带图标的ListView

--by San[[email protected]] 在编写列表时,如果是普通的列表,使用ListView + ArrayAdapter 即可实现,但是如果要在每个列表项中文字前配一个图标了,或者在文字后面再配一个图标,这个就可以用 SimpleAdapter 实现了,不要被它的名字欺骗了,It is not simple, it is powerful. 我们以制作一个带图标的菜单列表为例,首先我们创建一个布局文件 menu_frame.xml,里面包含一个 ListView, 代码如下:

使用Resource Hacker 实现替换exe图标的

1. 首先先下载安装ResHacker,然后打开"Resource Hacker": 链接:https://pan.baidu.com/s/1GY6AHaKtLiXd8Tjc4HkRIA 提取码:ad26 复制这段内容后打开百度网盘手机App,操作更方便哦 2.然后file - open打开要替换图标的exe文件. 3.找到你要替换的图标 4.然后在Action里面找到替换选项然后替换掉它,最后点击保存就替换图标成功了.此处需要注意的是有的电脑系统可能会存在缓存,显示的还是原来的图标,

Prometheus监控指标的label注入方法

Prometheus采集监控指标的方式如下图所示,Prometheus Server经过一定的配置可以从各种Exporter主动采集监控数据.广义上的Exporter可以是任何以Prometheus标准暴露监控指标的进程.不过严格来说可以划分为以下两类: 1. 对于Etcd这类应用程序,它们在代码中利用Prometheus官方提供的SDK定义了一系列自定义指标供Prometheus Server采集,此类指标一般用于描述该程序自身的运行状况.一般对于新开发或者改动难度较小的程序,可以用这种对代码

QT学习之如何在QToolBar中添加带图标的QToolButton并设置图标大小

在网上查到了三种方法,找到一种比较好理解的. 使用QIcon类: 1 QToolButton *toolBtn1 = new QToolButton(this); //创建QToolButton 2 toolBtn1->setIcon(QIcon(":/res/1.png")); //添加图标 3 toolBtn1->setFixedSize(20,20); //调图标大小(不是setIconSize) 4 ui->mainToolBar->addWidget(

graph使泳道图的label横向显示

1.如果需要将label靠左边对齐,则必须重写底层源码 新增mxText的一个构造器,主要是增加了一个参数:x(代表当前的cell) 1 function mxText(a, b, c, d, e, f, g, h, k, i, l, m, n, o, p, q, t, u, v, w, x) { 2 this.value = a; 3 this.bounds = b; 4 this.color = e != null ? e : "black"; 5 this.align = c !

iOS UILable 文字添加图片 (文字前面,中间,后面添加图)

1,实例化一个UILable 2, // 创建一个富文本 NSMutableAttributedString *attri =     [[NSMutableAttributedString alloc] initWithString:@"超时罚款24元/小时"]; NSTextAttachment *attch = [[NSTextAttachment alloc] init]; // 表情图片 attch.image = [UIImage imageNamed:@"par

echarts 饼状图调节 label和labelLine的位置

原理 使用一个默认颜色为透明的,并且只显示labelLine的饼状图 然后通过调节这个透明的饼状图 以达到修改labelLine的位置 echarts地址 https://gallery.echartsjs.com/editor.html?c=x6VnXPfxlx echarts源码: option = { backgroundColor: "#03141c", title: { text: "84%", subtext: '完成部门占比', x: 'center'