简单的图片+标题样式处理

效果类似于贴吧的 精 图片+标题,像下面这样

424E2A96-EC0F-49B2-ACC9-15D6E0530116.png

一个图片+文字,或者复杂点的格式。。。
iOS7之前,要做这样的效果需要NSAttributedstring结合CoreText渲染 - - 。。。
iOS7出现了TextKit框架,解决起来这个问题还是非常简单的。。。
首先要了解一下这个类:NSTextAttachment,从字面上的意思就是文本附件的意思,它有个image的属性,可以带上一个image。
我们在初始化属性字符串的时候,使用这个方法可以带上这个“附件”:

+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment;

携带了图片之后,还需要设定一下图片的尺寸,一般来说,使用的时候都是继承了这个类创建个子类,通过NSTextAttachment的代理方法:

- (CGRect)attachmentBoundsForTextContainer:(nullable NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex;

来设定这个图片的大小;或者可以直接创建NSTextAttachment的对象,通过设定bounds来改变图片的尺寸。
在使用上比CoreText简单多了。。。
举个例子:

继承NSTextAttachment创建一个子类

.h

#import 

@interface JWMainPageActiveTextAttachment : NSTextAttachment

@end

.m

#import "JWMainPageActiveTextAttachment.h"

@implementation JWMainPageActiveTextAttachment

- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex NS_AVAILABLE_IOS(7_0)
{
    return CGRectMake(0 ,0 ,lineFrag.size.height,lineFrag.size.height);
}

@end

lineFrag表示这一行的尺寸

使用

NSMutableAttributedString *titleLabText = [[NSMutableAttributedString alloc] initWithString:@"哈哈哈哈123"];
JWMainPageActiveTextAttachment *activeTextAttachment = [[JWMainPageActiveTextAttachment alloc] initWithData:nil ofType:nil];
activeTextAttachment.image = [UIImage imageNamed:@"actionguangfan2"];
NSAttributedString *textAttachmentString = [NSAttributedString                   attributedStringWithAttachment:activeTextAttachment];
[titleLabText insertAttributedString:textAttachmentString atIndex:0];
        }
self.titleLabel.attributedText = titleLabText;

简单粗暴

你可能感兴趣的:(简单的图片+标题样式处理)