Próbuję zamiast tego przekonwertować code found here na algorytm binarny, ponieważ metoda liniowa jest strasznie powolna. Mam działającą implementację, ale wydaje się, że jest coś, czego mi brakuje, ponieważ uzyskiwane wyniki nie są dokładne (to znaczy, jeśli dodaję lub odejmuję 20 lub więcej pikseli od szerokości, otrzymuję taki sam obcięty string.it powinien być trochę bardziej dokładny i mieć bliższe cięcie):Skróć NSString do szerokości
-(NSString*)stringByTruncatingToWidth:(CGFloat)width withFont:(UIFont*)font addQuotes:(BOOL)addQuotes
{
int min = 0, max = self.length, mid;
while (min < max) {
mid = (min+max)/2;
NSString *currentString = [self substringWithRange:NSMakeRange(min, mid - min)];
CGSize currentSize = [currentString sizeWithFont:font];
if (currentSize.width < width){
min = mid + 1;
} else if (currentSize.width > width) {
max = mid - 1;
} else {
min = mid;
break;
}
}
return [self substringWithRange:NSMakeRange(0, min)];
}
Czy ktoś może spoglądać z nietoperza, co może być z tym nie tak? (Jest to metoda kategoria, więc self
jest NSString
Dlaczego trzeba to obliczać samodzielnie? Co robisz ze struną? Jeśli wyświetlasz go tylko wewnątrz etykiety, możesz skonfigurować etykietę, aby ją obciąć. Możesz nawet pozwolić, aby etykieta nieco zmniejszyła rozmiar czcionki, aby dopasować tekst, aby zapobiec obcięciu. –
Rysuję i potrzebuję dodać elipsy na końcu. Chcę również zawijać cytaty wokół niego, więc drawInRect zLineBreakMode nie jest tutaj opcją, ponieważ odciąłby końcowy cytat .. – Snowman
Thx koleś dla twojego linku powyżej .. Szukałem mojego rozwiązania problemu jak szalonego ale w końcu znalazłem to w twoim poście .. – Rendy