支持中英文都没问题,使用的是CoreText处理,需要引入CoreText框架,并且
#import <CoreText/CoreText.h>
+ (
NSArray
*)
getSeparatedLinesFromLab el:(
UILabel
*)
label
{
NSString
*
text
=
[
label
text
];
UIFont
*
font
=
[
label
font
];
CGRect
rect
=
[
label
frame
];
CTFontRef
myFont
=
CTFontCreateWithName((
__bridge
CFStringRef
)([
font
fontName
]),
[
font
pointSize
],
NULL);
NSMutableAttributedStrin g
*
attStr
=
[[
NSMutableAttributedStrin g
alloc
]
initWithString:
text
];
[
attStr
addAttribute:(
NSString
*)
kCTFontAttributeName
value:(
__bridge
id)
myFont
range:
NSMakeRange(
0
,
attStr
.
length
)];
CTFramesetterRef
frameSetter
=
CTFramesetterCreateWithA ttributedString((
__bridge
CFAttributedStringRef)
attStr);
CGMutablePathRef
path
=
CGPathCreateMutable();
CGPathAddRect(
path
,
NULL
,
CGRectMake(
0
,
0
,
rect
.
size
.
width
,
100000));
CTFrameRef
frame
=
CTFramesetterCreateFrame (
frameSetter
,
CFRangeMake(
0
,
0
),
path
,
NULL);
NSArray
*
lines
= (
__bridge
NSArray
*)
CTFrameGetLines(
frame);
NSMutableArray
*
linesArray
=
[[
NSMutableArray
alloc
]
init
];
for (
id
line
in
lines)
{
CTLineRef
lineRef
= (
__bridge
CTLineRef )
line;
CFRange
lineRange
=
CTLineGetStringRange(
lineRef);
NSRange
range
=
NSMakeRange(
lineRange
.
location
,
lineRange
.
length);
NSString
*
lineString
=
[
text
substringWithRange:
range
];
[
linesArray
addObject:
lineString
];
}
return (
NSArray
*)
linesArray;
}
{
}
用这个方法就可以得到UILabel的最后一行文字,那样就可以计算得UILabel最后一行文字的宽度,就可以定位到最后一个文字的位置。这样的话,就可以应付变态的产品经理了,比如可以在文字的后面紧跟着贴一个icon什么的了。