Как правильно создать UIButton, который изменяет размер до длины текста в Xcode 4? - PullRequest
4 голосов
/ 05 сентября 2011

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

У меня есть кнопка, настроенная в файле XIB для изменения размера вправо, и на ней достаточно места для этого.

Проблема заключается в том, что при изменении метки размер кнопки не изменяется,

Это можно исправить, добавив [button sizeToFit]; после изменения метки.

Тем не менее я ищу решение, которое работает без добавления этого шага вручную в код.

button-ios-43

button-ios-50b7

Я упоминаючто для дальнейшего расширения кнопки достаточно места, все еще sizeToFit швов для увеличения кнопки, но недостаточно для размещения всего текста.

Чего мне не хватает?

Ответы [ 3 ]

22 голосов
/ 21 января 2013

[button sizeToFit] у меня не сработало, но я нашел способ использовать только IB (xcode 4.5):

  1. Нажмите на UIButton
  2. в инспекторе размеров перетащите content hugging в 1 (горизонтальное и вертикальное)
  3. перетащите compression resistance на 999 (для обоих)
  4. под UIButton constraints нажмите Width и измените priority на 250
  5. сделать то же самое для высоты
  6. Вы можете использовать UIButton inset для управления отступами слева / справа / сверху / снизу
2 голосов
/ 05 сентября 2011

Вам нужно вызвать sizeToFit на кнопке после установки заголовка, чтобы изменить его размер в соответствии с заданным заголовком.

Вы можете удалить шаг вручную, создав подкласс UIButton, переопределив setTitle:forControlState:метод и реализации вызова sizeToFit там.Не забудьте вызвать супер реализацию, иначе ваш заголовок не будет установлен и произойдут плохие вещи.

0 голосов
/ 04 июля 2013

В XCode 4.5 и выше это теперь можно сделать с помощью ' Auto-layout / Constraints '.

Основные преимущества:

  1. Вам вообще не нужно программно устанавливать кадры!
  2. Если все сделано правильно, вам не нужно беспокоиться о сбросе кадров для изменения ориентации.
  3. Кроме того, изменения устройства не должны беспокоить вас (читай, не нужно кодировать отдельно для разных размеров экрана).

Несколько недостатков:

  1. Не поддерживает обратную совместимость - работает только для iOS 6 и выше.
  2. Необходимо ознакомиться (но сэкономит время позже).

Самое классное, что мы можем сосредоточиться на объявлении намерения, например:

  • Я хочу, чтобы эти две кнопки были одинаковой ширины; или
  • Мне нужно, чтобы этот вид был центрирован по вертикали и простирался максимум на 10 пунктов от края суперпредставления; или даже
  • Я хочу, чтобы размер этой кнопки / ярлыка изменялся в соответствии с отображаемым ярлыком!

Вот простое руководство, чтобы познакомиться с автоматическим макетом: http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2

Для более подробного ознакомления с вещами, перейдите по ссылке: http://www.techotopia.com/index.php/An_Introduction_to_Auto_Layout_in_iOS_6

Сначала это занимает некоторое время, но, похоже, оно того стоит.

Ура!

...