• ParagraphString


    ParagraphString - 段落样式的简易处理

    效果

    源码

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

    //
    //  ParagraphString.h
    //  RichString
    //
    //  Created by YouXianMing on 2016/11/11.
    //  Copyright © 2016年 TechCode. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #import "BaseParagraphStyle.h"
    
    @interface ParagraphString : NSObject
    
    /**
     The input string.
     */
    @property (nonatomic, strong) NSString            *string;
    
    /**
     Set the string's font, default is nil.
     */
    @property (nonatomic, strong) UIFont              *font;
    
    /**
     Set the string's textColor, default is nil.
     */
    @property (nonatomic, strong) UIColor             *textColor;
    
    /**
     Set the paragraph style, default is nil.
     */
    @property (nonatomic, strong) BaseParagraphStyle  *paragraphStyle;
    
    /**
     Make the config (Font, textColor, paragraphStyle) effective.
     */
    - (void)makeConfigEffective;
    
    /**
     The attributedString, before you get this, you should set property and run makeConfigEffective first.
     */
    @property (nonatomic, strong, readonly) NSMutableAttributedString *attributedString;
    
    /**
     The string's height with the fixed width.
    
     @param width The specified width.
     @return The string's height.
     */
    - (CGFloat)heightWithFixedWidth:(CGFloat)width;
    
    /**
     The string's height with the fixed width.
    
     @param lines The number of lines.
     @param width The specified width.
     @return The string's height.
     */
    - (CGFloat)numberOfLines:(NSInteger)lines fixedWidth:(CGFloat)width;
    
    /**
     ParagraphString's constructor.
    
     @param string The string.
     @param font The font.
     @param color The color.
     @param style The paragraph style.
     @return The ParagraphString's instance.
     */
    + (instancetype)paragraphStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color
                               paragraphStyle:(BaseParagraphStyle *)style;
    
    @end
    //
    //  ParagraphString.m
    //  RichString
    //
    //  Created by YouXianMing on 2016/11/11.
    //  Copyright © 2016年 TechCode. All rights reserved.
    //
    
    #import "ParagraphString.h"
    
    @interface ParagraphString ()
    
    @property (nonatomic, strong) NSMutableAttributedString *attributedString;
    
    @end
    
    @implementation ParagraphString
    
    - (void)makeConfigEffective {
        
        if (self.string) {
            
            NSRange range = NSMakeRange(0, self.string.length);
            
            NSMutableAttributedString *richString = [[NSMutableAttributedString alloc] initWithString:self.string];
            
            self.font           ? [richString addAttribute:NSFontAttributeName            value:self.font range:range]           : 0;
            self.textColor      ? [richString addAttribute:NSForegroundColorAttributeName value:self.textColor range:range]      : 0;
            self.paragraphStyle ? [richString addAttribute:NSParagraphStyleAttributeName  value:self.paragraphStyle range:range] : 0;
            
            self.attributedString = richString;
            
        } else {
            
            self.attributedString = nil;
        }
    }
    
    + (instancetype)paragraphStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color
                               paragraphStyle:(BaseParagraphStyle *)style {
        
        ParagraphString *paragraphString = [[[self class] alloc] init];
        paragraphString.string           = string;
        paragraphString.font             = font;
        paragraphString.textColor        = color;
        paragraphString.paragraphStyle   = style;
        [paragraphString makeConfigEffective];
        
        return paragraphString;
    }
    
    - (CGFloat)heightWithFixedWidth:(CGFloat)width {
        
        CGFloat height = 0;
        
        if (self.attributedString) {
            
            CGRect rect = [self.attributedString boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                                              options:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                                              context:nil];
            
            height = rect.size.height;
        }
        
        return height;
    }
    
    - (CGFloat)numberOfLines:(NSInteger)lines fixedWidth:(CGFloat)width {
        
        NSRange                    range      = NSMakeRange(0, self.string.length);
        NSMutableAttributedString *richString = [[NSMutableAttributedString alloc] initWithString:self.string];
        
        self.font           ? [richString addAttribute:NSFontAttributeName            value:self.font range:range]           : 0;
        self.textColor      ? [richString addAttribute:NSForegroundColorAttributeName value:self.textColor range:range]      : 0;
        self.paragraphStyle ? [richString addAttribute:NSParagraphStyleAttributeName  value:self.paragraphStyle range:range] : 0;
        
        UILabel *label       = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width, 0)];
        label.numberOfLines  = lines;
        label.attributedText = richString;
        [label sizeToFit];
        
        return label.frame.size.height;
    }
    
    @end
    //
    //  BaseParagraphStyle.h
    //  RichString
    //
    //  Created by YouXianMing on 2016/11/11.
    //  Copyright © 2016年 TechCode. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface BaseParagraphStyle : NSMutableParagraphStyle
    
    @end
    //
    //  BaseParagraphStyle.m
    //  RichString
    //
    //  Created by YouXianMing on 2016/11/11.
    //  Copyright © 2016年 TechCode. All rights reserved.
    //
    
    #import "BaseParagraphStyle.h"
    
    @implementation BaseParagraphStyle
    
    @end
  • 相关阅读:
    玩裸机s3c2440资料集合
    windows7与虚拟机fedora 9.0文件共享
    仪表运算放大器INA333
    sql语句中的 case.. when...then ...else 用法
    JS判断RadioButtonList是否有选中项
    SQL SERVER 2005 同步复制技术
    软件安全性标准
    div+css网页标准版式布局
    ComboBox和SelectedIndexChanged(转)
    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/6070416.html
Copyright © 2020-2023  润新知