Расчет CGSize неизвестного NSString
Как я могу найти CGSize неизвестной строки, для которой я знаю только максимальное количество символов, но не точную строку?
Я знаю, что вы можете вычислить размер определенной строки NSString с помощью метода sizeWithFont для строки NSString следующим образом:
UIFont * font = [UIFont systemFontOfSize:15];
CGSize stringSize = [aString sizeWithFont:font];
CGFloat width = stringSize.width;
но я ищу способ, когда вы не знаете точную строку и просто знаете количество символов, которые может иметь строка.
2 ответа
CGSize может быть оценен только тогда, когда вы не знаете точных символов строки. В худшем случае оценка могла бы состоять в том, чтобы заполнить всю строку символами "M" или "W", потому что я думаю, что это должен быть самый широкий символ в большинстве шрифтов:
int charCount = 10;
NSString *testString = @"";
for (int i = 0; i < charCount; i++) {
testString = [testString stringByAppendingString:@"M"];
}
Вы также можете оценить лучший случай, добавив символы "i". Вы должны сделать много тестов, чтобы найти персонажа, который дает лучшие результаты в большинстве случаев.
Я не думаю, что будет способ.
Почему требуется передать строку?
- Потому что это буквы, которые потребляют ширину, и те получают изменения в соответствии с выбранным шрифтом. Например, 'lll' будет занимать меньше места, чем 'HHH', хотя оба содержат одинаковое количество букв (здесь его 3). Следовательно, обязательно указывать символы.
Обходной путь для этого
- Укажите букву, которая потребляет максимальную ширину, например, H, Q, W и т. Д., И укажите, сколько букв там. Например: если вам требуется ширина для 5 букв, выполните оператор, как показано ниже:
UIFont * font = [UIFont systemFontOfSize:15]; CGSize stringSize = [@"WWWWW"sizeWithFont:font]; // 5 times 'W' CGFloat width = stringSize.width;
Теперь вы получите максимальную вероятность ширины, которая учитывает все другие вероятности строки.
Это всего лишь обходной путь, я не думаю, что в iOS SDK есть точное решение.