iOS开发,UILabel文字均匀分布,两端对齐铺满整个控件

开发中常遇到UI要求文本均匀分布,两端对齐,开始使用在文字中手动打空格的方式,但常常会碰到相同文字有时三个字,有时四个字,五个字,这个时候用打空格的方式就会出现最后面的字或者符号无法对齐。此时,可以采用Category对UILable的文字分布方式进行处理

创建一个Category,.h提供方法

//两端对齐

- (void)textAlignmentLeftAndRight;

//指定Label以最后的冒号对齐的width两端对齐

- (void)textAlignmentLeftAndRightWith:(CGFloat)labelWidth;

.m中实现

引用

#import <CoreText/CoreText.h>

- (void)textAlignmentLeftAndRight{

[self textAlignmentLeftAndRightWith:CGRectGetWidth(self.frame)];

}

- (void)textAlignmentLeftAndRightWith:(CGFloat)labelWidth{

if(self.text==nil||self.text.length==0) {

return;

}

CGSize size = [self.text boundingRectWithSize:CGSizeMake(labelWidth,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.font} context:nil].size;

NSInteger length = (self.text.length-1);

NSString* lastStr = [self.text substringWithRange:NSMakeRange(self.text.length-1,1)];

if([lastStr isEqualToString:@":"]||[lastStr isEqualToString:@":"]) {

length = (self.text.length-2);

}

CGFloat margin = (labelWidth - size.width)/length;

NSNumber*number = [NSNumber numberWithFloat:margin];

NSMutableAttributedString* attribute = [[NSMutableAttributedString alloc]initWithString:self.text];[attributeaddAttribute:NSKernAttributeName value:numberrange:NSMakeRange(0,length)];

self.attributedText= attribute;

}


使用时应注意要在给Lable的frame,text设置完之后再使用,默认使用textAlignmentLeftAndRight即可。若有其他指定宽度要设置,可使用- (void)textAlignmentLeftAndRightWith:(CGFloat)labelWidth;  若结尾文字以其他固定文字结尾,可替换冒号再使用

具体效果如下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容