2015-10-16 6 views
0

Мы все знаем, как создать динамический UILabel шрифт (Single Line) -Создание одного размера шрифта динамического UILabel

lbl.adjustsFontSizeToFitWidth = true 
lbl.numberOfLines = 1 
lbl.minimumScaleFactor = 0.1 
lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters 
lbl.textAlignment = NSTextAlignment.Center 

Проблема заключается в том, что она дает разные результаты для каждой заданной строки. Так, например, если у меня есть строка "Hello" и "Hello World", то рассчитанный размер шрифта будет разным. Мне нужно создать динамический шрифт с одним размером для всех строк.

Пример из моего проекта:

MyProject

Пример из iPhone 6 встроенных эффектов камеры (Как вы можете видеть все размеры шрифтов UILabels матчей):

Apple

Что я думал делать?

В основном я знаю, какая у меня самая большая строка. Так что я думал, как-то вычислить (эффективным образом), что будет размер шрифта для наибольшая строка в данных CGSIze. Так что он всегда будет оставаться в безопасности. Любые предложения?

ответ

1

Ты один сказал:

lbl.minimumScaleFactor = 0.1 

Эта линия означает , «Эй, IOS, если вы чувствуете, как усадка шрифт, идти вперед и уменьшить его.» Если вы этого не хотите, тогда не говорите об этом.

Вместо этого выберите размер шрифта и придерживайтесь его. Какой размер? Ну, NSString имеет возможность рассказать вам размер рисованной строки в данном шрифте/размере. Так что просто возьмите свою самую длинную строку и пройдитесь по разным размерам, пока не найдете ту, которая подходит в нужном месте.

Подключите свои собственные значения в этом:

func fontSizeToFit(s:String, fontName:String, intoWidth w:CGFloat) -> CGFloat? { 
     let desiredMaxWidth = w 
     for i in (8...20).reverse() { 
      let d = [NSFontAttributeName:UIFont(name:fontName, size:CGFloat(i))!] 
      let sz = (s as NSString).sizeWithAttributes(d) 
      if sz.width <= desiredMaxWidth { 
       return(CGFloat(i)) 
      } 
     } 
     return nil 
    } 
    print(fontSizeToFit("Transferation", fontName:"GillSans", intoWidth:50)) // 9.0 

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

+0

Привет, матовый, Спасибо за ваш комментарий. Я знаю, что это неправильный способ использовать его * ЕСЛИ * вы ищете одинаковые размеры шрифта, очевидно. Я просто выложил его, чтобы люди не предлагали этот метод. В основном, что мне нужно делать (эффективным способом). С размером рамки (UILabel frame) и заданной строкой (включая имя шрифта) -> получить взамен необходимый размер шрифта –

+0

И я ответил на это. Просто сделайте быстрый цикл, скажем, 10 разных размеров. Ничего неэффективного. Это не займет миллисекунды. Доверьтесь мне. Я сделал это миллион раз. – matt

+0

Да. Это то, что я планировал сделать, просто хотел попробовать получить лучшие результаты. В настоящее время у нас есть iPhone 4 для iPad сетчатки -> Огромная разница. И im, используя autoLayout, чтобы настроить мой просмотр, и это все относительно размера экрана. Таким образом, для большего экрана он может работать более 10 раз. –

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