2017-01-03 11 views
0

Есть ли способ установить шрифт UILabel для большего размера на большом устройстве и меньше на маленьком устройстве?Настроить размер шрифта UILabel для измерения устройства

Нужно ли это делать программно, проверяя каждый раз, когда размер устройства?

Мой подход это, в настоящее время:

class func hightlightPtSize(height: CGFloat) -> CGFloat { 
    return height/25 
} 

class func notSoHighlightPtSize(height: CGFloat) -> CGFloat { 
    return height/30 
} 

class func stdPtSize(height: CGFloat) -> CGFloat { 
    return height/35 
} 

class func sizeForType(height: CGFloat, type: Int) -> CGFloat { 
    switch type { 
    case STD: 
     return stdPtSize(height: height) 
    case HIGHLIGHT: 
     return hightlightPtSize(height: height) 
    case NOT_SO_HIGH: 
     return notSoHighlightPtSize(height: height) 
    default: 
     return 0 
    } 
} 
+0

Я думаю, вы можете просто использовать 'adjustsFontSizeToFitWidth' вместо этого – Tj3n

+0

можно определить путем определения на какое разрешение вы проектирование пользовательского интерфейса, скажем, если ваша раскадровка имеет размер для iPhone 6, поэтому исправьте ширину до 375 и вычислите изменение, когда вы запустите устройство, скажем, для iPhone 5 с шириной 320, вы получаете разницу в '.85, делая 320/375', и если ваш шрифт был 14 для iPhone 6, вы получаете 11,9 для iPhone 5 и больше для больших устройств, умножая разницу на фактические шрифты, т.е. 14 * .85, поэтому формула приходит к 'fontSize * (actualScreenWidth/designTimeScreenWidth)' – iphonic

+0

I не могу понять, что вы в точности сталкиваетесь, но я предполагаю, что есть много подходов к рассмотрению лучше, чем делать это вручную ... Проверка идеи [Внутренний размер содержимого] (https://developer.apple.com/library/ контент/документация/UserExperience/Conceptual/AutolayoutPG/ViewswithIntrinsicContentSize.html) могут быть полезны вашему делу. –

ответ

4

У меня есть решение для вашей проблемы. Ниже моего кода в Objective C.

float newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/568.0); 
     if ([UIScreen mainScreen].bounds.size.height < 500) { 
      newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/480.0); 
     } 
     self.label.font = [UIFont fontWithName:self.label.font.fontName size:newFontSize]; 

Надеюсь, это вам поможет.

+0

что означает 480.0 и 568.0? – Andre99

+0

увеличьте размер шрифта в соответствии с соотношением масштабирования устройства, сравнив высоту UIScreen с текущей высотой xib во время разработки. я установил 568 для большего устройства, а затем 5 и 480 для меньшего устройства :) –

+0

работал как шарм, большое спасибо – Andre99

1

Я пытался до того, сделав свой шрифт по умолчанию для всех меток больше, чем любой возможности используемой - 60 в моем случае. Затем установите для свойства adjustsFontSizeToFitWidth значение true, чтобы позволить размеру шрифта для меня, а я установил size моего UILabel.

Чтобы сделать метку пропорциональной размеру экрана, вы можете использовать функцию авторезистентности раскадровки. При выборе UILabel, если нет существующих ограничений, вы можете увидеть что-то вроде этого:

enter image description here

В правой панели Xcode, нажмите на линии, чтобы включить или выключить, четыре линии на стороны будут сообщать, будет ли вид поддерживать его расстояние от сторон его superview, то два на квадрате скажут, изменит ли он его superview в вашем случае, убедитесь, что они включены, как на изображении выше. Что касается остальных четырех, с которыми я не работал, вы можете попробовать экспериментировать с переключением каждого из них в комбинации с другими, чтобы найти точное поведение, которое вы хотите.

Если ограничения нужны это братья и сестры или надстрочный/подстрочный взглядов, я могу предложить вам попробовать набор ограничений, таких как:

  • Этикетка (ширина) равна SuperView (ширина) - изменить множитель для установки сколько места вы хотите принять
  • Метка (высота) равна SuperView (высота) - такая же, как ширина
  • Метка (ведущая), равная SuperView (ведущая) - изменение постоянной для установки расстояния от переднего края, может при необходимости изменить на задний край
  • Метка (сверху) равна SuperVi ew (Top), как и ведущий, при необходимости может измениться на дно.

Это может быть немного многословно, но главным образом принять к сведению первых два, чтобы получить проклейки, установите множитель из ограничений не постоянного. Следующие два в основном предназначены только для того, чтобы удовлетворить требования по правильному размещению вашей метки в представлении. Вы можете свободно выравнивать центры или совмещать верхние/нижние/ведущие/завершающие комбинации, чтобы расположить их там, где хотите.

+0

и что, если мне нужно использовать хотя бы ограничение? то есть UILabel должен использовать половину общей ширины – Andre99

+0

В приведенном выше примере вам не нужно это ограничение. Установив текущий размер 'UILabel' в два раза меньше, чем у' UIView' и переключая горизонтальное масштабирование (строка с двумя стрелками, указывающими влево и вправо), 'UILabel' будет всегда изменять размер до половины своего' супервизора' , Если есть другие потребности ограничений, вам может потребоваться некоторое время, пока я улучшу свой ответ на использование ограничений. –

+0

, что было простым примером, в моем проекте мне действительно нужны ограничения. – Andre99

0

Мой Swift версия решения Kishan godhani в:

let screen = UIScreen.main 
var newFontSize = screen.bounds.size.height * (defaultFont/568.0); 
if (screen.bounds.size.height < 500) { 
    newFontSize = screen.bounds.size.height * (defaultFont/480.0); 
} 
label.font = label.font.withSize(newFontSize)