在
this question
我要求有一种好的方法来截断一个字符串以适合给定的UITextView。由于没有直接由sdk提供的方法,所以我在下面编写了递归方法(仅由以下公共方法调用)。但是,除非在计算字符串高度时从字段宽度中减去一个15(kfudgefactor)的混合因子,否则这不起作用。如果不这样做,返回的字符串对于字段来说实际上太长了,并在其下多显示一行。有人知道为什么,我应该用什么来代替这个软糖吗?
#pragma mark Size string to fit the new view
#define kFudgeFactor 15.0
#define kMaxFieldHeight 9999.0
-(NSString*) sizeStringToFit:(NSString*)aString min:(int)aMin max:(int)aMax
{
if ((aMax-aMin) <= 1)
{
NSString* subString = [aString substringToIndex:aMin];
return subString;
}
int mean = (aMin + aMax)/2;
NSString* subString = [aString substringToIndex:mean];
CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
CGSize stringSize = [subString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
if (stringSize.height <= self.frame.size.height)
return [self sizeStringToFit:aString min:mean max:aMax];
else
return [self sizeStringToFit:aString min:aMin max:mean];
}
-(NSString*)sizeStringToFit:(NSString*)aString
{
CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
CGSize stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
if (stringSize.height < self.frame.size.height)
return aString;
NSString* smallerString = [self sizeStringToFit:aString min:0 max:[aString length]];
return smallerString;
}