Сделать шрифт растут вместе с 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 или программно.

  • Минимальный размер шрифта, устаревший на версии ios 6.0
  • UIScrollView перестает прокручиваться после добавления UILabel на раскадровки
  • Swift 3 Создайте UILabel программно и добавьте NSLayoutConstraints
  • Добавление пробела / дополнения в UILabel
  • UILabel font: жирный и курсив
  • Невозможно уменьшить UILabel для соответствия содержимому при вращении
  • Вертикально выравнивать текст вверху в UILabel
  • Системный шрифт «Hiragino Sans» - это шоу с подрезанным поджатием и спусками
  • Как разрешить эту ошибку? - Класс «ViewController» не имеет инициализаторов
  • Отрегулируйте высоту UILabel в зависимости от текста
  • UILabel обрезает хвост и пропускает неточное слово
  • Interesting Posts

    Почему я получаю сообщение об ошибке при попытке удалить раздел в iOS

    Нарисуйте iOS 7-мерную петлю программно

    iOS для мобильной рекламы Ad-Hoc: ошибка «Не удалось извлечь архив»

    Добавить язык Lexicon в пользовательскую клавиатуру iOS для интеллектуального (наводящего) текста

    iOS – просмотр входа в систему до uitabbarcontroller

    Как получить уведомление, когда scrollToRowAtIndexPath завершает анимацию

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

    Совместное использование нескольких изображений с помощью UIActivityViewController

    Пример Vuforia VideoPlayback для 4.0?

    Как сделать резервную копию coredata, когда пользователь удаляет приложение и восстанавливает его, когда он снова устанавливает приложение в ios

    Как остановить мерцание загрузки при добавлении большого количества MKOverlays к карте

    UIWebView не может щелкнуть ссылку

    Прерывания AVAudioSession и изменения маршрута

    Как сопоставить сторонние учетные данные приложения с идентификатором iOS touch в iOS8?

    Раскадровка и автоспуск: как сделать круговое изображение

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.