Как поместить изображение с правой стороны текста в UIButton? - PullRequest
262 голосов
/ 18 августа 2011

Я не хочу использовать подпредставление, если смогу его избежать. Я хочу UIButton с фоновым изображением, текстом и изображением в нем. Прямо сейчас, когда я это делаю, изображение находится на левой стороне текста. Фоновое изображение, текст и изображение имеют разные состояния выделения.

Ответы [ 25 ]

0 голосов
/ 14 апреля 2016

Благодаря Виталию Гоженко

Я просто хочу добавить, что вы можете добавить IB_DESIGNABLE перед вашей кнопкой @interface и установить свой класс кнопки в storyborad.Затем вы можете посмотреть его макет в режиме реального времени без запуска приложения только на этапе создания интерфейса

enter image description here

0 голосов
/ 21 августа 2018

Чтобы выровнять изображение по правому краю внутри кнопки UIB, попробуйте следующий код

btn.contentHorizontalAlignment = .right
0 голосов
/ 18 сентября 2016

Swift 3:

open override func imageRect(forContentRect contentRect: CGRect) -> CGRect {
    var frame = super.imageRect(forContentRect: contentRect)
    let  imageWidth = frame.size.width
    var titleRect = CGRect.zero
    titleRect.size = self.title(for: self.state)!.size(attributes: [NSFontAttributeName: self.titleLabel!.font])
    titleRect.origin.x = (self.frame.size.width - (titleRect.size.width + imageWidth)) / 2.0 + self.titleEdgeInsets.left - self.titleEdgeInsets.right;
    frame.origin.x = titleRect.origin.x + titleRect.size.width - self.imageEdgeInsets.right + self.imageEdgeInsets.left;
    return frame
}

open override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
    var frame = super.titleRect(forContentRect: contentRect)
    if let imageWidth = self.image(for: self.state)?.size.width {
        frame.origin.x = (self.frame.size.width - (frame.size.width + imageWidth)) / 2.0 + self.titleEdgeInsets.left - self.titleEdgeInsets.right;
    }
    return frame
}
0 голосов
/ 03 августа 2017

Как насчет ограничений?В отличие от semanticContentAttribute, они не меняют семантику.Возможно, что-то вроде этого:

 button.rightAnchorconstraint(equalTo: button.rightAnchor).isActive = true

или в Objective-C:

[button.imageView.rightAnchor constraintEqualToAnchor:button.rightAnchor].isActive = YES;

Предостережения: не проверено, iOS 9 +

0 голосов
/ 05 октября 2016

swift 3.0 Миграция решение, данное jasongregori

class ButtonIconRight: UIButton {
        override func imageRect(forContentRect contentRect: CGRect) -> CGRect {
            var imageFrame = super.imageRect(forContentRect: contentRect)
           imageFrame.origin.x = super.titleRect(forContentRect: contentRect).maxX - imageFrame.width
        return imageFrame
        }

        override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
            var titleFrame = super.titleRect(forContentRect: contentRect)
            if (self.currentImage != nil) {
                titleFrame.origin.x = super.imageRect(forContentRect: contentRect).minX
            }
            return titleFrame
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...