Как изменить масштаб шрифта

#iphone #ipad #universal #uifont

#iPhone #iPad #Универсальный #uifont

Вопрос:

Я создаю универсальное приложение для iPhone и iPad. Я знаю, что есть возможность определить, что текст должен уменьшаться до выбранного размера точки, когда он слишком большой, однако мне нужно, чтобы текст увеличивался, когда текст отображается на iPad. Возможно ли это? У меня есть метка размером в 18 точек. Это почти занимает всю ширину на iPhone с учетом длины текста. Но на iPad этого не будет из-за увеличенного размера экрана…

Спасибо, что уделили мне время.

Комментарии:

1. Как насчет того, чтобы сделать размер шрифта намного больше, предполагая, что он будет уменьшен до размеров iPad и iPhone по отдельности? Я не пробовал этого, просто предлагаю это как идею.

Ответ №1:

У меня была такая же проблема в универсальном приложении.

Я установил параметры автоматического изменения размера для масштабирования всех компонентов непосредственно в Interface Builder, но это не увеличивало размер шрифта, чтобы занять вновь предоставленное пространство экрана.

В итоге я обновил viewDidLoad каждого представления с помощью приведенного ниже кода, в основном выполнив итерацию по компоненту представления и удвоив размер точки для всех меток (также можно сделать для кнопок):

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    for (UIView *component in self.view.subviews) {
        if ([component isKindOfClass:[UILabel class]]) {
            UILabel *labelToUpdate = (UILabel *) component;
            [labeltoUpdate setFont:[labelToUpdate.font fontWithSize:labelToUpdate.font.pointSize*2]];
        }
    }
  

Теперь приложение отлично масштабируется с iPhone на iPad.

Ответ №2:

Вы могли бы использовать метод в цикле:

 - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
  

пока вы не получите совпадение, занимающее две строки, используйте предыдущий размер шрифта. Кажется, быстрее / проще просто использовать идиомы для определения конкретного размера для iPad.