效果类似于贴吧的 精 图片+标题,像下面这样
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 <UIKit/UIKit.h>
@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;
简单粗暴
网友评论