Я хотел бы разместить значок слева от двух строк текста так, чтобы между изображением и началом текста было около 2-3 пикселей. Сам элемент управления выровнен по центру по горизонтали (устанавливается через Interface Builder)
Кнопка будет выглядеть примерно так:
| |
|[Image] Add To |
| Favorites |
Я пытаюсь настроить это с contentEdgeInset, imageEdgeInsets и titleEdgeInsets безрезультатно. Я понимаю, что отрицательное значение расширяет ребро, в то время как положительное значение уменьшает его, чтобы приблизить его к центру.
Я попытался:
[button setTitleEdgeInsets:UIEdgeInsetsMake(0, -image.size.width, 0, 0)];
[button setImageEdgeInsets:UIEdgeInsetsMake(0, button.titleLabel.bounds.size.width, 0, 0)];
но это не отображает это правильно. Я настраивал значения, но переход от -5 к -10 в левом значении вставки, кажется, не перемещает его ожидаемым образом. -10 будет перемещать текст полностью влево, поэтому я ожидал -5, чтобы сдвинуть его наполовину с левой стороны, но это не так.
Какая логика за вставками? Я не знаком с размещением изображений и соответствующей терминологией.
Я использовал этот вопрос в качестве ссылки, но что-то в моих ценностях не так. UIButton: как центрировать изображение и текст, используя imageEdgeInsets и titleEdgeInsets?
[UIButton setTitleColor:forState:]
, или даже[UIButton setTitle:forState:]
.Я немного опоздал на эту вечеринку, но думаю, что мне есть что добавить.
Ответ Кекоа великолепен, но, как упоминает RonLugge, он может заставить кнопку больше не уважать
sizeToFit
или, что более важно, может заставить кнопку обрезать ее содержимое, когда оно имеет собственный размер. Хлоп!Во-первых, хотя,
Краткое объяснение того, как я верю
imageEdgeInsets
иtitleEdgeInsets
работаю:В документах для
imageEdgeInsets
имеют следующее сказать, в частности , говорится :Я считаю, что эта документация была написана, представляя, что кнопка не имеет заголовка, только изображение. Это гораздо более разумно думать об этом и ведет себя так, как
UIEdgeInsets
обычно. По сути, рамка изображения (или заголовок сtitleEdgeInsets
) перемещается внутрь для положительных вставок и наружу для отрицательных вставок.Ок, и что?
Я получаю там! Вот что у вас есть по умолчанию, установив изображение и заголовок (граница кнопки зеленая, чтобы показать, где она находится):
Если вы хотите установить интервал между изображением и заголовком, не задавая ни один из них, вам нужно установить четыре разных вставки, по две на каждое изображение и заголовок. Это потому, что вы не хотите изменять размеры фреймов этих элементов, а только их положение. Когда вы начинаете думать таким образом, становится очевидным необходимое изменение превосходной категории Кекоа:
Но подождите , вы говорите, когда я это делаю, я получаю это:
О да! Я забыл, документы предупредили меня об этом. Они говорят, частично:
Но это свойство , которое может помочь, и это
contentEdgeInsets
. Документы для этого говорят, частично:Это звучит неплохо. Итак, давайте настроим категорию еще раз:
А что ты получаешь?
Выглядит как победитель для меня.
Работаете в Swift и вообще не хотите думать? Вот окончательная версия расширения в Swift:
источник
intrinsicContentSize
неправильности, что очень важно в эти дни автоматической разметки, так как первоначальный ответ был принят.spacing
стороной кнопки, изображением и надписью, добавьте к каждому из четырех значений self.contentEdgeInsets, например, так:self.contentEdgeInsets = UIEdgeInsetsMake(spacing, spacing + insetAmount, spacing, spacing + insetAmount);
В интерфейсе Builder. Выберите UIButton -> Attributes Inspector -> Edge = Title и измените вставки ребер
источник
Также, если вы хотите сделать что-то похожее на
Тебе нужно
1. Установите горизонтальное и вертикальное выравнивание для кнопки
Найти все необходимые значения и установить
UIImageEdgeInsets
Это устроит ваш заголовок и изображение на кнопке.
Также, пожалуйста, обратите внимание, обновлять это при каждой ретрансляции
стриж
источник
Вы можете избежать больших проблем, используя это -
Это автоматически выровняет ваш контент по левому краю (или там, где вы хотите)
Свифт 3:
источник
В Xcode 8.0 вы можете просто сделать это, изменив
insets
размер инспектора.Выберите UIButton -> Attributes Inspector -> перейдите в инспектор размера и измените содержимое, изображения и вставки заголовка.
И если вы хотите изменить изображение на правой стороне, вы можете просто изменить семантическое свойство
Force Right-to-left
в Инспекторе атрибутов.источник
Я тоже немного опоздал на эту вечеринку, но думаю, мне есть что добавить: о).
Я создал
UIButton
подкласс, цель которого состоит в том, чтобы иметь возможность выбирать, где изображение кнопки находится в макете, по вертикали или по горизонтали.Это означает, что вы можете сделать такие кнопки:
Вот подробности о том, как создать эти кнопки с моим классом:
Для этого я добавил 2 атрибута:
imageVerticalAlignment
иimageHorizontalAlignment
. Конечно, если у вашей кнопки есть только изображение или заголовок ... вообще не используйте этот класс!Я также добавил атрибут с именем,
imageToTitleSpacing
который позволяет вам регулировать пространство между заголовком и изображением.Этот класс старается изо всех сил быть совместимым, если вы хотите использовать
imageEdgeInsets
,titleEdgeInsets
иcontentEdgeInsets
напрямую или в сочетании с новыми атрибутами макета.Как объясняет нам @ravron, я изо всех сил стараюсь сделать правильный край содержимого кнопки (как вы можете видеть с красными полями).
Вы также можете использовать его в Интерфейсном Разработчике:
Вот код ( сущность ):
источник
error: IB Designables: Failed to update auto layout status: The agent crashed
, gist.github.com/nebiros/ecf69ff9cb90568edde071386c6c4ddberror: IB Designables: Failed to update auto layout status: The agent crashed
, потому чтоinit(frame: CGRect)
не было преодолено, и я добавить@available
аннотацию ..., вы можете ,diff -Naur
если вы хотите, ;-)Небольшое дополнение к ответу Райли Аврон на изменения локали аккаунта:
источник
Swift 4.x
Использование :
источник
Я пишу код ниже. Хорошо работает в версии продукта. Supprot Swift 4.2 +
источник
Вот простой пример того, как использовать imageEdgeInsets. Это сделает кнопку размером 30x30 с областью с хит-таблицей на 10 пикселей больше вокруг (50x50).
источник
Элегантный способ в Swift 3 и лучше понять:
источник
Версия решения Swift 4.2 будет иметь следующий вид:
источник