2010-05-31 2 views
1

Я пытаюсь создать простой пользовательский UIView, который содержит строку, нарисованную одним шрифтом, но где первый символ немного больше.NSString sizeWithFont: возвращает непоследовательные результаты? Известная ошибка?

Я думал, что это будет легко реализовано с помощью двух UILabel: s, расположенных рядом друг с другом.

Я использую NSString sizeWithFont для измерения моей строки, чтобы иметь возможность правильно ее выложить.

Но я заметил, что исходный шрифт шрифта в возвращаемом прямоугольнике изменяется с +/- 1 пикселем в зависимости от установленного размера шрифта. Вот мой код:

NSString* ctxt = [text substringToIndex:1]; 
NSString* ttxt = [text substringFromIndex:1]; 

CGSize sz = [ctxt sizeWithFont: cfont ]; 
clbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, sz.width, sz.height)]; 
clbl.text = ctxt; 
clbl.font = cfont; 
clbl.backgroundColor = [UIColor clearColor]; 
[contentView addSubview:clbl]; 

CGSize sz2 = [ttxt sizeWithFont: tfont]; 
tlbl = [[UILabel alloc] initWithFrame:CGRectMake(sz.width, (sz.height - sz2.height), sz2.width, sz2.height)]; 
tlbl.text = ttxt; 
tlbl.font = tfont; 
tlbl.backgroundColor = [UIColor clearColor]; 
[contentView addSubview:tlbl]; 

Если я использую 12.0 и 14.0 в размерах, он отлично работает. Но если я вместо этого использую 13.0 и 15.0, то первый символ будет слишком высоким на 1 пиксель.

Это известная проблема?

Любые предложения по работе с ним?

Создание UIWebView с CSS и HTML-страницей кажется для этого излишним. и больше работы для обработки динамических строк. Это то, что я должен делать?

+0

Я также попытался реализовать его как drawRect: используя [NSString drawInRect:], чтобы убедиться, что проблема не в рамках UILabel. Такая же проблема есть. –

ответ

1

Найдено ответ ...

Ofcourse, я также должен проверить значение спусковое на шрифт, и компенсировать это в макете.

Новый прямоугольник на второй этикетке: CGRectMake (sz.width (sz.height - sz2.height) + пол (cfont.descender - tfont.descender), sz2.width, sz2.height)

floor() должен убедиться, что он привязывается к позиции пикселя, или шрифт будет выглядеть размытым.

+0

Если вы нашли ответ, поделитесь им. –

+0

Я думал, что сделал. Чтобы быть более ясным, я изменил прямоугольник на вторую метку: CGRectMake (sz.width, (sz.height - sz2.height) + floor (cfont.descender - tfont.descender), sz2.width, sz2.height) –

Смежные вопросы