Могу ли я выровнять метку кнопки с полями макета? - PullRequest
0 голосов
/ 12 марта 2020

Один из способов выравнивания по левому краю заголовка UIButton - установить contentHorizontalAlignment на .left (или .leading). Но это помещает заголовок flu sh с левым краем кнопки без полей. Обычный способ добавить поле - установить contentEdgeInstets.

Но моя кнопка простирается от одного края экрана к другому, поэтому я хотел бы, чтобы левый и правый поля соответствовали layoutMargins , Эти поля могут измениться при изменении размера представления или при повороте устройства.

enter image description here

Есть ли способ настроить вкладки кнопки для наблюдения этих полей? Или я должен создать кнопку из пользовательского представления, где я могу использовать свой собственный ярлык и привязать его к layoutMarginsGuide?

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

Кнопка подкласса может работать для вас ...

class RespectSuperviewMarginButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()
        if let sv = superview {
            contentEdgeInsets.left = sv.layoutMargins.left
        }
    }

}
0 голосов
/ 12 марта 2020

Мой лучший лучший ответ: нет, это невозможно без подклассов.

Реализация подкласса, которую я сейчас использую, достаточно проста:

class LayoutMarginRespectingButton: UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()

        contentEdgeInsets = layoutMargins
    }
}
0 голосов
/ 12 марта 2020

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

Обратите внимание на следующее: две кнопки абсолютно идентичны, кроме origin.y и titleEdgeInsets:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
view.backgroundColor = .white

let button = UIButton(frame: CGRect(x: 40, y: 40, width: 200, height: 80))
button.setTitle("Some really long title", for: .normal)
button.backgroundColor = .red
button.setTitleColor(.black, for: .normal)

let button2 = UIButton(frame: CGRect(x: 40, y: 160, width: 200, height: 80))
button2.setTitle("Some really long title", for: .normal)
button2.backgroundColor = .red
button2.setTitleColor(.black, for: .normal)
button2.titleEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)


view.addSubview(button)
view.addSubview(button2)

Это дает следующий результат:

Button Test

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...