Сделать шрифт растут вместе с UILabel (измененный с помощью Auto Layout) – как это сделать в Interface Builder?

В простом приложении для iPhone я показываю плитку писем (пользовательский UIView с изображением и 2 метками) следующим кодом в viewDidLoad :

скриншот приложения

 DraggedTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"DraggedTile" owner:self options:nil] firstObject]; tile.frame = CGRectMake(10 + arc4random_uniform(100), 10 + arc4random_uniform(100), kWidth, kHeight); [self.view addSubview:tile]; 

Это работает нормально, но я хотел бы, чтобы плитка письма увеличивалась – когда я поставляю большие параметры ширины и высоты для CGRectMake .

Итак, в Xcode 5.1 Interface Builder я открываю DraggedTile.xib и DraggedTile.xib «Автоматический макет».

Затем для image и letter я добавляю ограничения в левый, верхний, правый, нижние края родителя.

Для letter метки я также установил «Линии» на 0 и «Приоритет сопротивления сжатию содержимого» до 1000 (здесь полноэкранный 1 и полноэкранный 2 ):

Скриншот Xcode

Скриншот Xcode

Затем я изменяю код, чтобы использовать большую ширину и высоту:

 tile.frame = CGRectMake(10 + arc4random_uniform(100), 10 + arc4random_uniform(100), 2 * kWidth, 2 * kHeight); 

Вот результат:

скриншот приложения

Как фоновое image и letter обозначение, похоже, выросли по назначению.

Однако размер шрифта на этикетке не вырос.

Я искал вокруг, и я думаю, что мне нужно что-то вроде tile.letter.adjustsFontSizeToFitWidth = YES . Но в то же время я не могу использовать его при включенной автоматической компоновке …

Итак, мой вопрос в том, есть ли какой-либо вариант в «Interface Builder», чтобы увеличить размер шрифта?

ОБНОВИТЬ:

Я попробовал предложение ismailgulek установить размер шрифта до 200 в Interface Builder и в коде tile.letter.adjustsFontSizeToFitWidth = YES и он выглядит многообещающим (здесь полноэкранный ):

Скриншот Xcode

но у меня есть проблема, что я установил 40px как ограничение letter.bottom в Interface Builder. Но что, если мне нужна большая рамка для плитки? Есть ли способ использовать процент, а не абсолютное значение пикселя в этом ограничении?

И еще один вопрос в том, можно ли настраивать adjustsFontSizeToFitWidth где-нибудь в Interface Builder или мне нужно использовать исходный код для этого? Я пробовал добавить ключ к «User Defined Runtime Attributes» – но тогда приложение вылетает во время выполнения:

Скриншот Xcode

5 Solutions collect form web for “Сделать шрифт растут вместе с UILabel (измененный с помощью Auto Layout) – как это сделать в Interface Builder?”

adjustsFontSizeToFitWidth для UILabel не будет увеличивать размер шрифта, оно предназначено только для уменьшения в соответствии с документацией: обычно текст ярлыка рисуется с помощью font , указанного в свойстве шрифта. Однако если это свойство установлено в YES , а текст в свойстве text превышает ограничивающий прямоугольник метки, приемник начинает уменьшать размер шрифта до тех пор, пока строка не будет соответствовать или не будет достигнут минимальный размер шрифта.

Но если вы установите размер шрифта достаточно большим (скажем 200) и настройте adjustsFontSizeToFitWidth на YES , я думаю, вы получите интересные результаты.

И не забудьте установить Baseline как Align Centers , иначе ваш текст может не отображаться должным образом.

Пожалуйста, сообщите нам о ваших результатах.

Для тех, кто приезжает сюда по названию и нуждается в простом решении (после нескольких часов исследований):

Пример проблемы: если вы используете автоматическую компоновку и устанавливаете высоту UILabel, которая будет пропорциональна высоте экрана, вы получите фрейм, который является низким для iPhone (пейзаж) и высоким для iPad. Как настроить высоту шрифта автоматически?

Решение: в Interface Builder,

  1. Установите «Autoshrink» на «Минимальный размер шрифта» и установите что-то для размера (оно влияет на слишком широкий текст, но требуется для нашего решения).
  2. Установите «Линии» равным 0 и сделайте размер шрифта выше, чем рамка, которую вы получите в iPad .

Это заставит шрифт автоматически увеличиваться до текущей высоты.

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

Вы можете заменить класс в Interface Builder собственным производным классом и изменить его размер.

Пример:

 /** MYLabel does exactly the same like UILabel, except that the font size will automatically shrink if the code is executed on an iPhone. */ class MYLabel: UILabel { var onlyOnceToken: dispatch_once_t = 0 override func drawRect(rect: CGRect) { dispatch_once(&onlyOnceToken) { if let usedFont:UIFont = self.font { // define your reference size here let iPadHeight:CGFloat = 768 let screenBounds = UIScreen.mainScreen().bounds let scale:CGFloat = screenBounds.height / iPadHeight self.font = UIFont(name: usedFont.fontName, size: CGFloat(usedFont.pointSize) * scale) } } super.drawRect(rect) } } 

С этого момента вам просто нужно заменить класс UILabel на MYLabel в инспекторе идентификации IB, и все ваши шрифты автоматически изменяют размер пропорционально высоте ваших устройств.

Если вы хотите просто увеличить его вместе с размером метки, замените

 let screenBounds = UIScreen.mainScreen().bounds 

с

 let screenBounds = self.bounds.height 

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

Шрифт не будет расти автоматически.
Вы должны увеличить / уменьшить его самостоятельно, в IB или программно.

  • Автоопределение UILabel в UITableViewCell
  • Вычисление числа строк динамического UILabel (iOS7)
  • Утечка памяти при настройке атрибутаText на 2 ярлыка в Swift
  • Неверный внутренний размер атрибутного текста в ярлыке
  • Написание языка хинди на UILabel в Xcode
  • Используя AutoLayout, как я могу сохранить UILabel в том же месте, когда панель навигации исчезнет?
  • Как я выравниваю UILabel TEXT горизонтально?
  • Как я могу получить UIPickerview для автоматического обновления UILabel
  • AutoLayout многострочный UILabel, отрезающий некоторый текст
  • Как я могу погладить и заполнить NSAttributedString w / UILabel
  • iOS / Objecitve-C UILabel текстовый кернинг
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.