Расчет 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 есть точное решение.

Другие вопросы по тегам