请选择 进入手机版 | 继续访问电脑版
源码天堂 设为首页 收藏本站
开启辅助访问 切换到宽版

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 立即注册 找回密码

IOS教程网

新浪微博达人勋

2423

积分

290

金钱

0

广播

Rank: 6Rank: 6

积分
2423

活跃会员热心会员推广达人社区QQ达人最佳新人

发表于 2016-11-24 22:39:14 | 显示全部楼层 |阅读模式
分享到:

ParagraphString - 段落样式的简易处理

607542-20161116171400310-492530075.jpg


效果

607542-20161116171423232-719652907.jpg


源码

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

  1. //
  2. //  ParagraphString.h
  3. //  RichString
  4. //
  5. //  Created by YouXianMing on 2016/11/11.
  6. //  Copyright © 2016年 TechCode. All rights reserved.
  7. //

  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. #import "BaseParagraphStyle.h"

  11. @interface ParagraphString : NSObject

  12. /**
  13. The input string.
  14. */
  15. @property (nonatomic, strong) NSString            *string;

  16. /**
  17. Set the string's font, default is nil.
  18. */
  19. @property (nonatomic, strong) UIFont              *font;

  20. /**
  21. Set the string's textColor, default is nil.
  22. */
  23. @property (nonatomic, strong) UIColor             *textColor;

  24. /**
  25. Set the paragraph style, default is nil.
  26. */
  27. @property (nonatomic, strong) BaseParagraphStyle  *paragraphStyle;

  28. /**
  29. Make the config (Font, textColor, paragraphStyle) effective.
  30. */
  31. - (void)makeConfigEffective;

  32. /**
  33. The attributedString, before you get this, you should set property and run makeConfigEffective first.
  34. */
  35. @property (nonatomic, strong, readonly) NSMutableAttributedString *attributedString;

  36. /**
  37. The string's height with the fixed width.

  38. @param width The specified width.
  39. @return The string's height.
  40. */
  41. - (CGFloat)heightWithFixedWidth:(CGFloat)width;

  42. /**
  43. The string's height with the fixed width.

  44. @param lines The number of lines.
  45. @param width The specified width.
  46. @return The string's height.
  47. */
  48. - (CGFloat)numberOfLines:(NSInteger)lines fixedWidth:(CGFloat)width;

  49. /**
  50. ParagraphString's constructor.

  51. @param string The string.
  52. @param font The font.
  53. @param color The color.
  54. @param style The paragraph style.
  55. @return The ParagraphString's instance.
  56. */
  57. + (instancetype)paragraphStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color
  58.                            paragraphStyle:(BaseParagraphStyle *)style;

  59. @end
复制代码


  1. //
  2. //  ParagraphString.m
  3. //  RichString
  4. //
  5. //  Created by YouXianMing on 2016/11/11.
  6. //  Copyright © 2016年 TechCode. All rights reserved.
  7. //

  8. #import "ParagraphString.h"

  9. @interface ParagraphString ()

  10. @property (nonatomic, strong) NSMutableAttributedString *attributedString;

  11. @end

  12. @implementation ParagraphString

  13. - (void)makeConfigEffective {
  14.    
  15.     if (self.string) {
  16.         
  17.         NSRange range = NSMakeRange(0, self.string.length);
  18.         
  19.         NSMutableAttributedString *richString = [[NSMutableAttributedString alloc] initWithString:self.string];
  20.         
  21.         self.font           ? [richString addAttribute:NSFontAttributeName            value:self.font range:range]           : 0;
  22.         self.textColor      ? [richString addAttribute:NSForegroundColorAttributeName value:self.textColor range:range]      : 0;
  23.         self.paragraphStyle ? [richString addAttribute:NSParagraphStyleAttributeName  value:self.paragraphStyle range:range] : 0;
  24.         
  25.         self.attributedString = richString;
  26.         
  27.     } else {
  28.         
  29.         self.attributedString = nil;
  30.     }
  31. }

  32. + (instancetype)paragraphStringWithString:(NSString *)string font:(UIFont *)font color:(UIColor *)color
  33.                            paragraphStyle:(BaseParagraphStyle *)style {
  34.    
  35.     ParagraphString *paragraphString = [[[self class] alloc] init];
  36.     paragraphString.string           = string;
  37.     paragraphString.font             = font;
  38.     paragraphString.textColor        = color;
  39.     paragraphString.paragraphStyle   = style;
  40.     [paragraphString makeConfigEffective];
  41.    
  42.     return paragraphString;
  43. }

  44. - (CGFloat)heightWithFixedWidth:(CGFloat)width {
  45.    
  46.     CGFloat height = 0;
  47.    
  48.     if (self.attributedString) {
  49.         
  50.         CGRect rect = [self.attributedString boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
  51.                                                           options:NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
  52.                                                           context:nil];
  53.         
  54.         height = rect.size.height;
  55.     }
  56.    
  57.     return height;
  58. }

  59. - (CGFloat)numberOfLines:(NSInteger)lines fixedWidth:(CGFloat)width {
  60.    
  61.     NSRange                    range      = NSMakeRange(0, self.string.length);
  62.     NSMutableAttributedString *richString = [[NSMutableAttributedString alloc] initWithString:self.string];
  63.    
  64.     self.font           ? [richString addAttribute:NSFontAttributeName            value:self.font range:range]           : 0;
  65.     self.textColor      ? [richString addAttribute:NSForegroundColorAttributeName value:self.textColor range:range]      : 0;
  66.     self.paragraphStyle ? [richString addAttribute:NSParagraphStyleAttributeName  value:self.paragraphStyle range:range] : 0;
  67.    
  68.     UILabel *label       = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width, 0)];
  69.     label.numberOfLines  = lines;
  70.     label.attributedText = richString;
  71.     [label sizeToFit];
  72.    
  73.     return label.frame.size.height;
  74. }

  75. @end
复制代码



新浪微博达人勋

188

积分

2

金钱

0

广播

Rank: 2

积分
188
发表于 2016-11-24 22:39:34 | 显示全部楼层
路过 帮顶 嘿嘿

新浪微博达人勋

2364

积分

299

金钱

0

广播

Rank: 6Rank: 6

积分
2364

活跃会员热心会员推广达人社区QQ达人最佳新人

发表于 2016-12-7 20:20:36 | 显示全部楼层
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!

新浪微博达人勋

1995

积分

84

金钱

1

广播

Rank: 9Rank: 9Rank: 9

积分
1995

社区QQ达人推广达人

发表于 2016-12-28 20:12:12 | 显示全部楼层
纯粹路过,没任何兴趣,仅仅是看在老用户份上回复一下

新浪微博达人勋

310

积分

4

金钱

0

广播

Rank: 3Rank: 3

积分
310
发表于 2016-12-29 23:30:13 | 显示全部楼层
边撸边过

新浪微博达人勋

1215

积分

-12

金钱

0

广播

Rank: 6Rank: 6

积分
1215
发表于 2016-12-31 09:35:59 | 显示全部楼层
好,很好,非常好!

新浪微博达人勋

382

积分

37

金钱

0

广播

Rank: 3Rank: 3

积分
382
发表于 2017-1-2 00:53:00 | 显示全部楼层
传说中的沙发???哇卡卡

新浪微博达人勋

2359

积分

283

金钱

0

广播

Rank: 6Rank: 6

积分
2359

活跃会员热心会员推广达人社区QQ达人最佳新人

发表于 2017-2-4 12:10:11 | 显示全部楼层
我擦!我要沙发!

新浪微博达人勋

1160

积分

0

金钱

0

广播

Rank: 6Rank: 6

积分
1160
发表于 2017-2-8 08:40:50 | 显示全部楼层
站位支持

新浪微博达人勋

299

积分

6

金钱

1

广播

Rank: 3Rank: 3

积分
299
发表于 2017-3-18 01:13:21 | 显示全部楼层
沙发???
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

小黑屋|手机版|Archiver|IOS教程网. ( 粤ICP备12089784号  

GMT+8, 2017-10-17 14:22 , Processed in 0.197384 second(s), 47 queries .

Powered by Discuz X3.1

© 2001-2013 IOS教程网

快速回复 返回顶部 返回列表