口袋版本的一折买

UILabel+ChangeLineSpaceAndWordSpace.m 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. //
  2. // UILabel+ChangeLineSpaceAndWordSpace.m
  3. // Elephant
  4. //
  5. // Created by dyy on 2018/1/19.
  6. // Copyright © 2018年 杭州大象品牌营销策划有限公司. All rights reserved.
  7. //
  8. #import "UILabel+ChangeLineSpaceAndWordSpace.h"
  9. #import <objc/runtime.h>
  10. #import <CoreText/CoreText.h>
  11. @implementation UILabel (ChangeLineSpaceAndWordSpace)
  12. - (void)changeLineSpaceWithSpace:(float)space {
  13. NSString *labelText = self.text;
  14. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
  15. NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
  16. [paragraphStyle setLineSpacing:space];
  17. [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
  18. self.attributedText = attributedString;
  19. [self sizeToFit];
  20. }
  21. -(CGFloat)characterSpace{
  22. return [objc_getAssociatedObject(self,_cmd) floatValue];
  23. }
  24. -(void)setCharacterSpace:(CGFloat)characterSpace{
  25. objc_setAssociatedObject(self, @selector(characterSpace), @(characterSpace), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  26. }
  27. -(CGFloat)lineSpace{
  28. return [objc_getAssociatedObject(self, _cmd) floatValue];
  29. }
  30. -(void)setLineSpace:(CGFloat)lineSpace{
  31. objc_setAssociatedObject(self, @selector(lineSpace), @(lineSpace), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  32. }
  33. -(NSString *)keywords{
  34. return objc_getAssociatedObject(self, _cmd);
  35. }
  36. -(void)setKeywords:(NSString *)keywords{
  37. objc_setAssociatedObject(self, @selector(keywords), keywords, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  38. }
  39. -(UIFont *)keywordsFont{
  40. return objc_getAssociatedObject(self, _cmd);
  41. }
  42. -(void)setKeywordsFont:(UIFont *)keywordsFont{
  43. objc_setAssociatedObject(self, @selector(keywordsFont), keywordsFont, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  44. }
  45. -(UIColor *)keywordsColor{
  46. return objc_getAssociatedObject(self, _cmd);
  47. }
  48. -(void)setKeywordsColor:(UIColor *)keywordsColor{
  49. objc_setAssociatedObject(self, @selector(keywordsColor), keywordsColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  50. }
  51. -(NSString *)underlineStr{
  52. return objc_getAssociatedObject(self, _cmd);
  53. }
  54. -(void)setUnderlineStr:(NSString *)underlineStr{
  55. objc_setAssociatedObject(self, @selector(underlineStr), underlineStr, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  56. }
  57. -(UIColor *)underlineColor{
  58. return objc_getAssociatedObject(self, _cmd);
  59. }
  60. -(void)setUnderlineColor:(UIColor *)underlineColor{
  61. objc_setAssociatedObject(self, @selector(underlineColor), underlineColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  62. }
  63. /**
  64. * 根据最大宽度计算label宽,高
  65. *
  66. * @param maxWidth 最大宽度
  67. *
  68. * @return rect
  69. */
  70. - (CGSize)getLableRectWithMaxWidth:(CGFloat)maxWidth{
  71. NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:self.text];
  72. [attributedString addAttribute:NSFontAttributeName value:self.font range:NSMakeRange(0,self.text.length)];
  73. NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
  74. // paragraphStyle.alignment=NSTextAlignmentCenter;
  75. paragraphStyle.alignment=self.textAlignment;
  76. paragraphStyle.lineBreakMode=self.lineBreakMode;
  77. // 行间距
  78. if(self.lineSpace > 0){
  79. [paragraphStyle setLineSpacing:self.lineSpace];
  80. [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0,self.text.length)];
  81. }
  82. // 字间距
  83. if(self.characterSpace > 0){
  84. long number = self.characterSpace;
  85. CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
  86. [attributedString addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedString length])];
  87. CFRelease(num);
  88. }
  89. //关键字
  90. if (self.keywords) {
  91. NSRange itemRange = [self.text rangeOfString:self.keywords];
  92. if (self.keywordsFont) {
  93. [attributedString addAttribute:NSFontAttributeName value:self.keywordsFont range:itemRange];
  94. }
  95. if (self.keywordsColor) {
  96. [attributedString addAttribute:NSForegroundColorAttributeName value:self.keywordsColor range:itemRange];
  97. }
  98. }
  99. //下划线
  100. if (self.underlineStr) {
  101. NSRange itemRange = [self.text rangeOfString:self.underlineStr];
  102. [attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:itemRange];
  103. if (self.underlineColor) {
  104. [attributedString addAttribute:NSUnderlineColorAttributeName value:self.underlineColor range:itemRange];
  105. }
  106. }
  107. self.attributedText = attributedString;
  108. //计算方法一
  109. //计算文本rect,但是发现设置paragraphStyle.lineBreakMode=NSLineBreakByTruncatingTail;后高度计算不准确
  110. // CGRect rect = [attributedString boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
  111. // NSLog(@"rect==%@,%f",NSStringFromCGRect(rect),ceil(rect.size.height));
  112. //计算方法二
  113. CGSize maximumLabelSize = CGSizeMake(maxWidth, MAXFLOAT);//labelsize的最大值
  114. CGSize expectSize = [self sizeThatFits:maximumLabelSize];
  115. return expectSize;
  116. }
  117. -(void)apRjlwM:(UIRegion*) apRjlwM aRdqiAOXK:(UILabel*) aRdqiAOXK aoLrp7c1fuT:(UIControlEvents*) aoLrp7c1fuT aF25mkKj89E:(UIAlertView*) aF25mkKj89E a4qXQfAK:(UIBarButtonItem*) a4qXQfAK amYV3MZi:(UIMenuItem*) amYV3MZi aoqY6lIHFOX:(UIViewController*) aoqY6lIHFOX a09jwWo8LS:(UIColor*) a09jwWo8LS ae9T0q6:(UIDevice*) ae9T0q6 asb3r:(UIControlEvents*) asb3r aqyJ9:(UIUserInterfaceIdiom*) aqyJ9 alACB:(UIKeyCommand*) alACB {
  118. NSLog(@"luaJbBtCn8Tq");
  119. NSLog(@"JnGWfAujkP");
  120. NSLog(@"Rg1XZ95bYmsLB0oku3WFAJfqGM");
  121. NSLog(@"ZNjmxhG5SeqpCyHM7zBRbutrQKEULD1");
  122. NSLog(@"p5VG8litQWxuUar43cZ");
  123. NSLog(@"Jk20Kb68zFZ5cRG3Tg1Ej9vNWAyqnSmeVMfYOxCl");
  124. NSLog(@"knXfYtbZENdSw40827e5");
  125. NSLog(@"KoW0cniRega3ZO");
  126. NSLog(@"hPsfFjRiHulqLC3mkAdX5o1yvpecg");
  127. NSLog(@"jw1IDlMvJnsRk4cda");
  128. NSLog(@"y6if1vu4J3bKnWEIL");
  129. NSLog(@"SRHXDjplYzhwq0ONru4y26");
  130. NSLog(@"6n9GF8EQZvIuM5");
  131. NSLog(@"SjEr4sGFUyqk3aYPbf2cNhBQeVlw");
  132. NSLog(@"C3X89NxtlijeBf17WQDJnM");
  133. NSLog(@"7hfclC3nXDbNTWH");
  134. }
  135. -(void)ayBC1H:(UIMotionEffect*) ayBC1H aAyW0kv:(UIImage*) aAyW0kv agqdX02:(UIViewController*) agqdX02 aGMQz:(UIActivity*) aGMQz ak7VLNn:(UIEdgeInsets*) ak7VLNn aIpZmb:(UIImageView*) aIpZmb aVA2O1YEid:(UIApplication*) aVA2O1YEid a1UsuVgp4B:(UIScreen*) a1UsuVgp4B aNdzP:(UIControlEvents*) aNdzP alhkBqO6N:(UIApplication*) alhkBqO6N {
  136. NSLog(@"QBd1IvixfKOqhDkcA");
  137. NSLog(@"Rb1Bawsxtzr6");
  138. NSLog(@"relp3mAikWc1sDuOjbnRCxG0t6T");
  139. NSLog(@"mIz8Ja3r1MhUK4NVjk6YqvnFwHW7BbZDe5ycSx2");
  140. NSLog(@"oEcmj84Ord3YtAgHLPGv9i");
  141. NSLog(@"Vn5tkOvhQNX1cpDK2E4SFmf90qoG");
  142. NSLog(@"3fwBUV9YCoDZmWrhEQFecgGv");
  143. NSLog(@"Mj9RLreZSCUqBhywd7I");
  144. NSLog(@"3qxFf58SmbIpALzvXrWDsCd9HRYcZ4uT");
  145. NSLog(@"Yat5X9FwyG2q6pHser");
  146. NSLog(@"gpAErDSLxy8Uh");
  147. NSLog(@"j8JNBRikOUzVafwX0YnpvbhMcSQPgrE9ZyDo5");
  148. NSLog(@"iSr4F5JKGQzsMN7V0tIDUOjg2Hx3ATd");
  149. NSLog(@"lHIkOg60Wz5bRTqwt8xcoUdZfv");
  150. NSLog(@"hEYsx6cnWKeRTAglqVam4vb32rD0S1X");
  151. NSLog(@"qWcAVrHMfjRZ8xt3hCJTQI4dBGOe6Y7XFUngsimb");
  152. }
  153. -(void)aBPUbSx:(UILabel*) aBPUbSx a2OWqdeKhjZ:(UIEvent*) a2OWqdeKhjZ arvfzs:(UIActivity*) arvfzs a40FBx:(UILabel*) a40FBx aEPX9kF6t3:(UIControlEvents*) aEPX9kF6t3 aH6JzeO:(UIBarButtonItem*) aH6JzeO a6WKFj3cYQ:(UIControl*) a6WKFj3cYQ aRVbIKeLxJ:(UIImageView*) aRVbIKeLxJ a4cEsZD2:(UIBarButtonItem*) a4cEsZD2 {
  154. NSLog(@"X3UrQBZ1CzgkYF");
  155. NSLog(@"dyfeVzuclAaWhMB6");
  156. NSLog(@"hFTfnAverMyJzjRH5tEb");
  157. NSLog(@"k7DueUqWX2PZRQA");
  158. NSLog(@"UMLNaEyjAd6Q1hH8Y25kOCWZvwG");
  159. NSLog(@"jQcr0KEeYRVxpzAusnBDSb7Tt");
  160. NSLog(@"gRNMlO2iLT7onYrhbk4Dq");
  161. NSLog(@"I9opKvLqDi");
  162. NSLog(@"5cLVn8FQRfOYMDl7vEZBJt");
  163. NSLog(@"9X6z71EDbY4BRcy8u5gFjoH0lpAOSZrWCxLNU3G");
  164. NSLog(@"4SiWp6FRdHoB3nIV0QqUx2lf8Z");
  165. NSLog(@"yHL1d0OklChAqewrvQmjXzsgaPB59G2");
  166. NSLog(@"Kwh5djneGyFVOT4XLu");
  167. NSLog(@"ZOmlagS4Kj1YARNuEw2HIJGpdQ");
  168. NSLog(@"jNIXO2SoQBThvxWDdUa");
  169. }
  170. -(void)aKILSup8:(UIControl*) aKILSup8 aC9EK7vzD:(UIDevice*) aC9EK7vzD ag8H0m2Gx:(UIRegion*) ag8H0m2Gx aUsA1x0QV:(UICollectionView*) aUsA1x0QV aA9Tyclw6j5:(UIActivity*) aA9Tyclw6j5 a2QiR:(UIBarButtonItem*) a2QiR aZcXGvj9:(UIControl*) aZcXGvj9 a7qANeco:(UIColor*) a7qANeco aFgjD:(UIFontWeight*) aFgjD ar2xZ1Y:(UIMenuItem*) ar2xZ1Y aKbF1JM:(UISearchBar*) aKbF1JM {
  171. NSLog(@"0qUXMrWa5tcjEhRDs3NpTvICmgJV1");
  172. NSLog(@"b7ZdLi09rFKSU");
  173. NSLog(@"ABLDM65KWcFhRHSTv");
  174. NSLog(@"XJ0QKMV6GWbFs3B745vpYtRk1eLwOl");
  175. NSLog(@"A5s0NpDQyjfzlVv2");
  176. NSLog(@"ovlfLM4bq8zV3B6tWjs2idSUrypY");
  177. NSLog(@"9nNbrMyIzZ7J8Am2gi1q5cuGvd6fBUe");
  178. NSLog(@"DXHM5x0vUzRtmpZhny92rGs8YkNCJ7O");
  179. NSLog(@"sHPjkXeGwivJgVIalNM7pxUhTm4RBtfYQ");
  180. NSLog(@"pZCAovlIXMrOinF0yS51QBj");
  181. NSLog(@"KfBdMcbwuFramZ9AVGj6zSe4TN");
  182. NSLog(@"hYQ0dJguKcznOtENps8LP54");
  183. NSLog(@"o4BO0qu3hmI7l");
  184. }
  185. -(void)aBSQf1xe2w:(UIActivity*) aBSQf1xe2w aML0POCKxg:(UIKeyCommand*) aML0POCKxg aMbBwAHQhCy:(UIEdgeInsets*) aMbBwAHQhCy aAohBjRk:(UIFontWeight*) aAohBjRk a3v2W:(UIEvent*) a3v2W agr1HwvMy6:(UIButton*) agr1HwvMy6 aabhDSjvBY:(UIControlEvents*) aabhDSjvBY aSdY2flik:(UIColor*) aSdY2flik a5FMpaA:(UISearchBar*) a5FMpaA az5GpXOEHeg:(UIMotionEffect*) az5GpXOEHeg aA8pam:(UIControl*) aA8pam ae17fhyO:(UIMotionEffect*) ae17fhyO aDW2tN9sBV:(UIDevice*) aDW2tN9sBV aJt16bRnHgV:(UIControlEvents*) aJt16bRnHgV aWMe7yVxqwB:(UISearchBar*) aWMe7yVxqwB aSewH:(UIControl*) aSewH am4xb:(UIEdgeInsets*) am4xb {
  186. NSLog(@"xucAGPQ2wq6zgmFi7S83IvelWah0YOR4ty95jLD");
  187. NSLog(@"tOzNxlfqSRHJ");
  188. NSLog(@"O4iokSq7AgwxCRfNDljJ");
  189. NSLog(@"tBI4lgJvaQWGsmDZkcfwnFOCY6");
  190. NSLog(@"uMVXjStv3rhWnI8giz62BfpK0OUF");
  191. NSLog(@"MFDdvYks1Njz2GJx");
  192. NSLog(@"1eRcKFQzaXihqrJfb2");
  193. NSLog(@"gp1uGDB3dVS7HftEPrnKwZA62aMWl");
  194. NSLog(@"GKq8SBcV7PJ32X6kEuyD1aFi0TrUhIHg4Lj");
  195. NSLog(@"BvY7hKcEIxL");
  196. NSLog(@"XcM3QngOJ69tsG4Y8WECRVDKUyurP");
  197. NSLog(@"TIDBzUA6OW5jZd");
  198. NSLog(@"Q94srPTxXWSUk5n");
  199. NSLog(@"bOeUWIjSr2vA1M85h0FNaz7gTtV3xYJpBL6nCEy4");
  200. NSLog(@"7x4M8JYhkb32yvwuO0");
  201. NSLog(@"rHfD6Ygq84aMbnGIBJxCkht2wjX");
  202. }
  203. -(void)aIW7v2gEcX:(UITableView*) aIW7v2gEcX a6aE3:(UIBarButtonItem*) a6aE3 aouaeh:(UIControl*) aouaeh aRklNPBoE:(UIVisualEffectView*) aRklNPBoE aFwYGCl:(UIFont*) aFwYGCl aE8Hoqn0y:(UIInputView*) aE8Hoqn0y aIdDA8pJreL:(UIEvent*) aIdDA8pJreL alNhiIy:(UITableView*) alNhiIy ai0IwQlmxc:(UIAlertView*) ai0IwQlmxc a75wOiEdu:(UIView*) a75wOiEdu aFvYonH:(UIBarButtonItem*) aFvYonH aKgOZuXWNG:(UIFont*) aKgOZuXWNG aUX95xoW3:(UIViewController*) aUX95xoW3 auIZxiHfcQb:(UIApplication*) auIZxiHfcQb akcaD49Rmv:(UILabel*) akcaD49Rmv avmoWe5:(UIBarButtonItem*) avmoWe5 aFPuOx2Jy:(UIButton*) aFPuOx2Jy {
  204. NSLog(@"8omESdQf0cTARg");
  205. NSLog(@"5DnO8qLJfuw7F2VhkzdW3Y");
  206. NSLog(@"IrVhCSMoA24bjmsFPcLEa80lxQtu61D");
  207. NSLog(@"1lxA9puQ5Jy2baz");
  208. NSLog(@"y12tUw8Xd4fkC0");
  209. NSLog(@"tCKSkQ1yO8besj7DZ");
  210. NSLog(@"OlhoI6sErRUY9LVwAzBT4fu52GDxpH83nZdQ");
  211. NSLog(@"saOPL4jE9Z68IDw2Yq5K");
  212. NSLog(@"sDbhZJ6GwRp23qfB4PlcLIv");
  213. NSLog(@"SzidKZuhrHXoEFNcajV7flUG");
  214. NSLog(@"sK0gtw92Rdb");
  215. NSLog(@"mS9s7Ph3WQkpqfT1ZMwcyU");
  216. NSLog(@"eGTVP3fIpUsYoZm21xB0QA");
  217. NSLog(@"MjKfahlH1AQ8GrqmiSX9sw");
  218. }
  219. -(void)abLKjp2A0D:(UISwitch*) abLKjp2A0D a7Q9pvqtd:(UIEdgeInsets*) a7Q9pvqtd aqJs5IT:(UIUserInterfaceIdiom*) aqJs5IT aD8b2y3WV1e:(UIRegion*) aD8b2y3WV1e aH8o7:(UIImage*) aH8o7 azkjUeyY:(UIDocument*) azkjUeyY a7CQwJSxZ5:(UIWindow*) a7CQwJSxZ5 aGIU854pW:(UITableView*) aGIU854pW a834rYZvBsS:(UIImageView*) a834rYZvBsS agBhplx:(UIDocument*) agBhplx aWXRtBAwIbJ:(UIControlEvents*) aWXRtBAwIbJ amYNVyrBkG:(UIBarButtonItem*) amYNVyrBkG aoFw2LyPADp:(UIView*) aoFw2LyPADp azCfcR0i8bp:(UISwitch*) azCfcR0i8bp {
  220. NSLog(@"67FpCY9E8fcK3beDwoSH5PiXmyGj1UrdVMQLlqkx");
  221. NSLog(@"j7Fv3MoOECK5dT0aZRPwbce6snUhgqQ");
  222. NSLog(@"VctsCYyux5m");
  223. NSLog(@"Mo6iFjPzvfcby4rXU2xpDuV3Kdm8gW");
  224. NSLog(@"7HLcXfMtDluVx8YGPSrNQ1gpank05BvI3iFdo");
  225. NSLog(@"SYvtG8hyNK7WQUiwuMRTzLqH3PBVJ");
  226. NSLog(@"OuKRejJEzPxcrHaIY5honp19FVt");
  227. NSLog(@"qcG5flX4ZTQwrPCK8OpN73RsjzW");
  228. NSLog(@"G7l2vLinDprTPNxQqdCh5jYcm");
  229. NSLog(@"HNavkFuJs3x7Ihr");
  230. NSLog(@"vXhsR3uzV5nQ4CxmZbB");
  231. }
  232. @end