2010-10-01 3 views
0

У меня есть UITextView, который должен иметь одну строку текста.iphone - вопрос о UITextView и его размере

Размер шрифта контролируется слайдером. Когда пользователь управляет слайдером, я вычисляю новый размер UITextView, используя (это метод, называемый слайдером при его перемещении).

- (void) changeFontSize:(id)sender { 
    UISlider *slider = (UISlider *)sender; 
    CGFloat newSize = (CGFloat)[slider value]; 

    myTextView.font = [UIFont boldSystemFontOfSize:newSize]; 
    [self adjustBoxforSize:myTextView.text]; 
} 

- (void) adjustBoxForSize:(NSString*)myText { 

    CGFloat fontSize = myTextView.font.pointSize; 

    CGSize newSize = 
     [myText sizeWithFont:[UIFont boldSystemFontOfSize:fontSize]]; 
    newSize.width = newSize.width * 1.5; // make it 50% larger 
    newSize.height = newSize.height * 1.5; // make it 50% taller 
    CGRect myFrame = CGRectMake(0.0f, 0.0f, newSize.width, newSize.height); 
    myTextView.frame = myFrame; 
} 

Если я уменьшить шрифт, это результат

alt text

Вопрос заключается в том: как текст будет из TextView, если я его масштабирования, чтобы соответствовать и действительно делает его 50% больше?

Я что-то упустил? Кажется, что sizeWithFont неправильно вычисляет размер.

Спасибо.

ответ

1

TextView имеет прокладки, которые не растут с размером вида. Добавление фиксированной суммы к вычисленному размеру текста делает трюк. Что-то вроде этого:

newSize.width = newSize.width + 20; 

20 кажется хорошим для вас номер дела, но вы можете попробовать тонкую настройку.

1

Может быть, я ошибаюсь, но это:

newSize.width = fontSize.width * 1.5; // make it 50% larger 
newSize.height = fontSize.height * 1.5; // make it 50% taller 

не должно быть, как это?

newSize.width = newSize.width * 1.5; // make it 50% larger 
newSize.height = newSize.height * 1.5; // make it 50% taller 

В противном случае вы используете размер шрифта вместо размера вычисленного текста.

+0

извините за это. Это была опечатка, когда я скопировал код из моего приложения сюда (я должен был упростить его и ошибался). Я исправил вопрос. – SpaceDog

+1

Попробуйте следующее: newSize.width = newSize.width + 20; Кажется, paddings не растут с размером шрифта. – MaxFish

+0

это, кажется, решает одну проблему. Выполнение этого в процентах не очень хорошо, потому что у вас будет небольшое увеличение, когда шрифт будет небольшим, но выполнение его с использованием фиксированной суммы сделает трюк. Повторите свой комментарий в качестве ответа, поэтому я могу принять его. благодаря! – SpaceDog