设置UILabel 两端对齐

遇到这个问题, 本来想找现成的方案,结果半天没合适的 于是自己搞了一个,其实挺简单,给需要的朋友:

直接上代码- (void)viewDidLoad {[super viewDidLoad]; NSString * string = @”你好”;[self conversionCharacterInterval:4 current:string withLabel:self.tempLabel];NSString * string1 = @”你好吗”;[self conversionCharacterInterval:4 current:string1 withLabel:self.tempLabel1];NSString * string2 = @”我不好呀”;[self conversionCharacterInterval:4 current:string2 withLabel:self.tempLabel2];// Do any additional setup after loading the view, typically from a nib.}/** * @brief 添加字符间距 * * @param maxInteger 最大字符长度 * @param currentString 当前显示字符 * @param label 显示label */- (void)conversionCharacterInterval:(NSInteger)maxInteger current:(NSString *)currentString withLabel:(UILabel *)label{)options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeadingattributes:@{NSFontAttributeName: label.font}context:nil];NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:currentString];[attrString addAttribute:NSKernAttributeName value:@(((maxInteger – currentString.length) * rect.size.width)/(currentString.length – 1)) range:NSMakeRange(0, currentString.length)];label.attributedText = attrString;}

2 用到知识点: NSAttributedString UIKit Additions 参考文:

概述

UIKit 在 NSAttributedString 中加入了新的方法,以支持格式化文本的绘制、计算文本在绘制前的大小及空间。这些方法不影响文本的内容,只影响绘制的过程。

默认,文本绘制使用本地坐标,内容从某个点向右向下绘制。当你放置文本内容时,记住文本块的左上角就是绘制的起点。

你可以在主线程之外使用这些方法,但是,如果是支持NSStringDrawingContext 的任何方法,则无法跨过线程或 dispatch queue 共享 NSStringDrawiingContext。

实例方法

绘制文本

– drawAtPoint: – drawInRect: – drawWithRect:options:context: 计算文本的空间

– size – boundingRectWithSize:options:context: 实例方法

boundingRectWithSize:options:context:

返回文本绘制所占据的矩形空间。

(CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context

参数

size

宽高限制,用于计算文本绘制时占据的矩形块。

Thewidth and height constraints to apply when computing the string’s boundingrectangle.

options

文本绘制时的附加选项。可能取值请参考“NSStringDrawingOptions”。

context

context上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。

返回值

一个矩形,大小等于文本绘制完将占据的宽和高。

讨论

可以使用该方法计算文本绘制所需的空间。size 参数是一个constraint ,用于在绘制文本时作为参考。但是,如果绘制完整个文本需要更大的空间,则返回的矩形大小可能比 size 更大。一般,绘制时会采用constraint 提供的宽度,但高度则会根据需要而定。

特殊情况

为了计算文本块的大小,该方法采用默认基线。

如果 NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度将被忽略,同时使用单线绘制。(由于一个 bug,在 iOS6 中,宽度会被忽略)

兼容性

iOS 6.0 以后支持。 声明于

NSStringDrawing.h

drawAtPoint:

从指定点(当前图形上下文)开始绘制文本。

(void)drawAtPoint:(CGPoint)point

参数

point

当前图形上下文中的点,文本将从此开始绘制。该图形上下文的坐标系通常由当前正在绘制的视图定义。

讨论

该方法从某个点开始绘制整个文本。该方法根据 attributedstring 的属性来绘制行。如果文本中出现换行符,将进行换行,后续的文本将被放到下一行的最初位置。

兼容性

iOS 6.0 以后支持. 声明于

NSStringDrawing.h

drawInRect:

在当前图形上下文的指定矩形内绘制文本。

(void)drawInRect:(CGRect)rect

参数

rect

指定绘制文本的矩形范围。

讨论

该方法在指定矩形内绘制尽可能多的文本内容,必要时会压缩字符。如果对于该矩形来说,文本内容太长,该方法绘制尽可能多的内容,剩余内容将被剪切。该方法用 attributed string 的属性来绘制行。如果文本中出现换行符,将进行换行,后续的文本将被放到下一行的最初位置。

兼容性

Available in iOS 6.0 and later. Declared In

NSStringDrawing.h

drawWithRect:options:context:

用提供的选项将文本绘制到指定的矩形分为内。

(void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context

参数

rect

指定在某个矩形中绘制文本。

options

文本绘制选项。可能取值请参考“NSStringDrawingOptions”。

context

上下文对象,用于包含信息:如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil。

讨论

该方法在指定矩形内绘制尽可能多的文本内容,必要时会对字符进行压缩。如果矩形内要绘制的文本内容太长,该方法将根据需要缩放字体,或者调整字符间距。

该方法用 attributed string 的属性来绘制行。如果文本中出现换行符,,将进行换行,后续的文本将被放到下一行的最初位置。

特殊情况

该方法采用默认基线。

如果NSStringDrawingUsesLineFragmentOrigin 未指定,矩形的高度将被忽略,同时使用单线绘制。(由于一个 bug,在 iOS6 中,宽度会被忽略)

兼容性

iOS 6.0 以后支持. 声明于

NSStringDrawing.h

size

返回文本绘制所需 size。

Returns the sizerequired to draw the string.

(CGSize)size

返回值

绘制完整文本所需的最小 size。

讨论

可以用该方法在绘制之前计算需要多大空间。

兼容性

iOS 6.0 以后支持. 声明于

NSStringDrawing.h

常量

NSStringDrawingOptions

文本绘制选项。

enum {

NSStringDrawingTruncatesLastVisibleLine= 1 << 5,

NSStringDrawingUsesLineFragmentOrigin= 1 << 0,

NSStringDrawingUsesFontLeading= 1 << 1,

NSStringDrawingUsesDeviceMetrics= 1 << 3,

};

typedef NSInteger NSStringDrawingOptions;

常量

NSStringDrawingTruncatesLastVisibleLine

如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。

NSStringDrawingUsesLineFragmentOrigin

绘制文本时使用 line fragement origin 而不是 baseline origin。

Theorigin specified when drawing the string is the line fragment origin and notthe baseline origin.

NSStringDrawingUsesFontLeading

计算行高时使用行间距。(译者注:字体大小+行间距=行高)

NSStringDrawingUsesDeviceMetrics

计算布局时使用图元字形(而不是印刷字体)。

Usethe image glyph bounds (instead of the typographic bounds) when computinglayout.

划线样式属性

指定下划线或删除线样式。

enum {

NSUnderlineStyleNone = 0x00,

NSUnderlineStyleSingle= 0x01,

};

常量

NSUnderlineStyleNone

不划线。

NSUnderlineStyleSingle

单线

讨论

可以在属性字串的 NSUnderlineStyleAttributeName和NSStrikethroughStyleAttributeName属性上使用这些常量。

字符属性

字符属性可以应用于 attributed string 的文本中。

NSString *const NSFontAttributeName;

NSString *const NSParagraphStyleAttributeName;

NSString *const NSForegroundColorAttributeName;

NSString *const NSBackgroundColorAttributeName;

NSString *const NSLigatureAttributeName;

NSString *const NSKernAttributeName;

NSString *const NSStrikethroughStyleAttributeName;

NSString *const NSUnderlineStyleAttributeName;

NSString *const NSStrokeColorAttributeName;

NSString *const NSStrokeWidthAttributeName;

NSString *const NSShadowAttributeName;

NSString *const NSVerticalGlyphFormAttributeName;

常量

NSFontAttributeName

该属性所对应的值是一个 UIFont 对象。该属性用于改变一段文本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。

NSParagraphStyleAttributeName

该属性所对应的值是一个 NSParagraphStyle 对象。该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle 方法返回的默认段落属性。

NSForegroundColorAttributeName

该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的字体颜色。如果不指定该属性,则默认为黑色。

NSBackgroundColorAttributeName

该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的背景颜色。如果不指定该属性,则默认无背景色。

NSLigatureAttributeName

你曾经说,你曾经说。走在爱的旅途,我们的脚步多么轻松……

设置UILabel 两端对齐

相关文章:

你感兴趣的文章:

标签云: