美文网首页
简单的图片+标题样式处理

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

作者: 举个栗子wow | 来源:发表于2016-06-03 15:39 被阅读406次

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

    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;
    
    

    简单粗暴

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wztldttx.html