最新处理程序员
关于如下问题,已经有了最新的处理方式,一句代码就能够搞定,解决办法以下:微信
messageTitle.lineBreakMode = NSLineBreakByCharWrapping;
平时不太关注Label的其余属性,因此也就没有往那方面想,之后会多关注,在此感谢评论区的大神指教...app
过时处理
今天同事问我一个问题就是UILabel上数字过长直接下一行致使后面留白怎么处理,具体问题以下:atom
同事问个人解决办法,我说这个怼回去啊,能不动代码就不动代码呀,因而我找了个微信的状况做为怼的资本,截图以下:3d
可是过了一下子同事说没办法拗不过产品经理,好吧,那只能怼代码了,如今的程序员说话份量愈来愈轻了(敲黑板!!!若是有来生,绝对不作程序猿!!!)code
那么要怼代码,该怎么怼呢?orm
思路blog
首先我须要将一段文字,先以两行来讲,那么若是靠近Label末端是一段数字的话那么铁定会换行出现上面截图的状况,可是我试过了只要不是一段完整的数字就行,也就是说为了避免影响内容的美观,咱们只须要在特定的位置加上空格或者换行符就好了。那怎么精准的算出特定位置呢?ip
这个时候咱们须要知道两个长度:ci
经过一段文字的长度与Label的长度进行比较就能够得出特定的位置,可是这只是两行,那若是有不少行呢?咱们须要作一下迭代便可。
另外考虑到咱们一句话解决全部问题的思想,因此咱们须要建立一个UILabel的分类来设置数字分段。
代码
首先建立分类UILabel+SetNewLineText,代码以下:
//UILabel+SetNewLineText.h #import <UIKit/UIKit.h> @interface UILabel (SetNewLineText) //数字分段Text @property(nonatomic, copy) NSString *newLineText; //存储文字的 @property(nonatomic, copy) NSMutableString *mStr; @end
//UILabel+SetNewLineText.m // // UILabel+SetTheContentToNewLine.m // testDeom // // Created by KODIE on 2017/7/19. // Copyright © 2017年 admin. All rights reserved. // #import "UILabel+SetNewLineText.h" #import <objc/message.h> #define kLabelWidth ([UIScreen mainScreen].bounds.size.width - 15 * 2) #define kTextSize 17 @implementation UILabel (SetNewLineText) - (void)setMStr:(NSMutableString *)mStr{ objc_setAssociatedObject(self, "mStr", mStr, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (NSMutableString *)mStr{ return objc_getAssociatedObject(self, "mStr"); } - (void)setNewLineText:(NSString *)text{ CGFloat textWidth = [self widthWithText:text]; if (textWidth < kLabelWidth) { self.text = text; return; } for (NSInteger i = 0; i < text.length; i++) { NSString *subStringFor = [text substringToIndex:i]; NSString *subStringBeh = [text substringToIndex:i+1]; NSString *subStringOth = [text substringFromIndex:i]; CGFloat textWidthFor = [self widthWithText:subStringFor]; CGFloat textWidthBeh = [self widthWithText:subStringBeh]; CGFloat textWidthOth = [self widthWithText:subStringOth]; if (textWidthFor <= kLabelWidth && textWidthBeh > kLabelWidth) { if (self.mStr == nil) { NSString *string = @""; [self setMStr:string.copy]; } if(textWidthOth > kLabelWidth){ NSString *newString = [NSString stringWithFormat:@"%@ ",subStringFor]; NSString *string = [NSString stringWithFormat:@"%@%@",self.mStr, newString]; [self setMStr:string.copy]; //[self.mStr appendString:newString]; [self setNewLineText:subStringOth]; }else{ NSString *newString = [NSString stringWithFormat:@"%@ %@",subStringFor,subStringOth]; NSString *string = [NSString stringWithFormat:@"%@%@",self.mStr, newString]; [self setMStr:string.copy]; //[self.mStr appendString:newString]; } } } self.text = self.mStr.copy; } - (NSString *)newLineText{ return self.text; } #pragma mark - private function - (CGFloat)widthWithText:(NSString*)text { CGSize size = [text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:kTextSize]}]; return size.width; } @end
说明几个变量:
PS: 这15*2是由于个人Label作约束的时候距离左边和右边都是15公分,因此须要减掉这部分
PS: 这个指的是文字的size,我是xib上定的,截图以下:
只要把这些两个参数给改了就能适应你本身的场景了,调用以下:
导入头文件:
调用:
多行:
若有疑问或者更好的方式或者办法请评论提出,感谢各位看官,以上!!!