我試圖將code found here轉換爲二進制算法,因爲線性方法非常慢。我有一個工作實現,但這似乎是我失蹤的一些東西,因爲我得到的結果並不精確(也就是說,如果我從寬度加上或減去20個像素,我會得到相同的截斷string..it應該有點更準確,並有接近切):將NSString截斷爲寬度
-(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)];
}
任何人都可以看到蝙蝠可能是什麼錯呢? (這是一個類的方法,因此self
是一個NSString
你爲什麼需要自己計算一下?你在做什麼?如果你只在一個標籤內顯示它,那麼你可以配置標籤爲你截斷它。你甚至可以允許標籤縮小字體大小以適應文本以防止截斷。 –
我正在繪製它,需要在其末尾添加一個省略號。我也想包裹引號,所以drawInRect withLineBreakMode不是一個選項在這裏,因爲它會切斷結束報價.. – Snowman
Thx兄弟你的鏈接上面..我瘋狂搜索我的問題解決方案,但最終發現它在你的帖子.. – Rendy