Długość łańcucha z podaną czcionką, aby dopasować UITextView 2 - Powrót

Wto pytanie Poprosiłem o dobry sposób na obcięcie łańcucha, aby pasował do danego UITextView. Ponieważ SDK nie zapewniał bezpośredniego sposobu, zakończyłem pisanie poniższej metody rekurencyjnej (wywoływanej tylko następującą metodą publiczną). Jednak nie działa to, jeśli nie odejmuję współczynnika krówki 15 (kFudgeFactor) od szerokości pola podczas obliczania wysokości łańcucha. Jeśli tego nie zrobię, zwrócony ciąg jest w rzeczywistości zbyt długi dla pola i wyświetla się w dodatkowej linii poniżej. Ktoś ma jakiś pomysł dlaczego i czego powinienem użyć zamiast tego czynnika krówki?

#pragma mark Size string to fit the new view

#define kFudgeFactor 15.0
#define kMaxFieldHeight 9999.0

// recursive method called by the main API
-(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]; // too small
else    
        return [self sizeStringToFit:aString min:aMin max:mean];// too big
}

-(NSString*)sizeStringToFit:(NSString*)aString
{

CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
CGSize stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

// if it fits, just return
if (stringSize.height < self.frame.size.height)
    return aString; 

// too big - call the recursive method to size it       
NSString* smallerString = [self sizeStringToFit:aString min:0 max:[aString length]];
return smallerString;   
}

questionAnswers(2)

yourAnswerToTheQuestion