У меня есть UIButton
текст «Изучить приложение» и UIImage
(>) Interface Builder
он выглядит так:
[ (>) Explore the app ]
Но мне нужно поместить это UIImage
ПОСЛЕ текста:
[ Explore the app (>) ]
Как я могу переместить UIImage
вправо?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Павел Якименко
источник
источник
Ответы:
Мое решение довольно простое
источник
В iOS 9 кажется, что простой способ добиться этого - форсировать семантику представления.
Или программно, используя:
источник
semanticContentAttribute
в нашей логике макета, вместо того, чтобы изменятьsemanticContentAttribute
себя. (изменение семантического подхода, не будет работать с интернационализацией)Установите
imageEdgeInset
и,titleEdgeInset
чтобы перемещать компоненты внутри изображения. Вы также можете создать кнопку, используя полноразмерную графику, и использовать ее в качестве фонового изображения для кнопки (затем используйтеtitleEdgeInsets
для перемещения заголовка).источник
Ответ Раймонда В. здесь лучше всего. Подкласс UIButton с настраиваемым layoutSubviews. Чрезвычайно просто сделать, вот реализация layoutSubviews, которая сработала для меня:
источник
А как насчет подкласса
UIButton
и переопределенияlayoutSubviews
?Затем постобработка местоположений
self.imageView
&self.titleLabel
источник
Другой простой способ (это НЕ только для iOS 9) - создать подкласс UIButton, чтобы переопределить эти два метода.
contentEdgeInsets
уже учтено при использовании super.источник
Использование «справа налево» для кнопки невозможно, если ваше приложение поддерживает как «слева направо», так и «справа налево».
Решение, которое сработало для меня, представляет собой подкласс, который можно добавить к кнопке в раскадровке и который хорошо работает с ограничениями (протестировано в iOS 11):
Где «отступ» - это пространство между заголовком и изображением.
источник
.forceRightToLeft
вариант! Просто используйте противоположное значение (.forceLeftToRight
), еслиUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.В Swift:
источник
На основе ответа @split ...
Ответ фантастический, но он игнорирует тот факт, что кнопка может иметь пользовательское изображение и вставки края заголовка, которые установлены заранее (например, в раскадровке).
Например, вы можете захотеть, чтобы изображение имело отступ сверху и снизу контейнера, но все же переместите изображение в правую часть кнопки.
Я расширил концепцию этим методом:
источник
Это создает кнопку с выравниванием по правому краю, например:
Ширина кнопки не регулируется в соответствии с контекстом, поэтому слева от метки появится пробел. Вы можете решить эту проблему, вычислив ширину рамки кнопки из buttonLabelSize.width и buttonImageSize.width.
источник
источник
Это решение работает с iOS 7 и выше.
Просто подкласс UIButton
Использование (где-то в вашем классе):
источник
Основываясь на предыдущих ответах. Если вы хотите иметь отступ между значком и заголовком кнопки, код необходимо немного изменить, чтобы предотвратить перемещение метки и значка над границами кнопок с внутренним размером.
Последняя строка кода важна для внутреннего расчета размера содержимого для автоматического макета.
источник
Вот мой собственный способ сделать это (примерно через 10 лет)
источник
Однострочное решение в Swift:
источник