Установка изображения и текста на кнопку с помощью AutoLayout - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь создать кнопку с выпадающей стрелкой справа от текста программно примерно так:

Dropdown button

Решения, которые яВы видели, использовали заголовки и вставки изображений, но есть ли способ установить их с помощью AutoLayout программно?В зависимости от выбранной опции, текст в кнопке может измениться, и длина текста будет отличаться, поэтому я не уверен, могут ли быть вставки заголовка и края.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Это пример размещения UIStackView в главном виде контейнера VC (в моем случае UIStackView занимает все доступное пространство внутри VC).Основная информация о пользователях добавляется в этом случае к телефонному номеру.

Я создаю контейнерное представление телефонного номера (UIView), а UILabel содержит тел.нет.и UIImageView для стрелки раскрывающегося списка.

let telNoContainerView: UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()
let telNoLabel: UILabel = {
    let view = UILabel()
    let font = UIFont.systemFont(ofSize: 15)
    view.font = font
    view.backgroundColor = UIColor.white
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()
let telNoImageView: UIImageView = {
    let view = UIImageView()
    view.backgroundColor = UIColor.white
    view.tintColor = ACTION_COLOR
    view.image = UIImage(named: "Chevron")?.withRenderingMode(.alwaysTemplate)
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

В setBasicInfoViews() просто добавьте telNoContainerView к UIStackView.Затем UILabel и UIImageView добавляются в представление содержимого telNoContainerView.После этого ограничения добавляются по мере необходимости.Вам нужно будет изменить ограничения, чтобы они соответствовали дизайну вашего пользовательского интерфейса.

fileprivate func setBasicInfoViews(){
    infoStackView.addArrangedSubview(telNoContainerView)

    telNoContainerView.addSubview(telNoLabel)
    telNoContainerView.addSubview(telNoImageView)
    NSLayoutConstraint.activate([
        telNoLabel.topAnchor.constraint(equalTo: telNoContainerView.topAnchor, constant: 0.0),
        telNoLabel.bottomAnchor.constraint(equalTo: telNoContainerView.bottomAnchor, constant: 0.0),
        telNoLabel.leadingAnchor.constraint(equalTo: telNoContainerView.leadingAnchor, constant: 0.0),
        telNoLabel.trailingAnchor.constraint(equalTo: telNoContainerView.trailingAnchor, constant: 0.0)
        ])
    NSLayoutConstraint.activate([
        telNoImageView.centerYAnchor.constraint(equalTo: telNoLabel.centerYAnchor, constant: 0.0),
        telNoImageView.heightAnchor.constraint(equalToConstant: 30.0),
        telNoImageView.widthAnchor.constraint(equalToConstant: 30.0),
        telNoImageView.trailingAnchor.constraint(equalTo: telNoLabel.trailingAnchor, constant: 0.0)
        ])
}
0 голосов
/ 11 октября 2018

Нет, нет способа установить свойства макета изображения и заголовка на UIButton с помощью AutoLayout.

Если вы хотите полностью настраиваемый макет для изображения и заголовка в UIButton, я бы предложил создать UIView и добавить title и image в качестве подпредставлений, используя AutoLayout, а затем добавить касаниераспознаватель жестов в UIView

buttonView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.buttonAction)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...