Автоматическое размещение для UIButton в ячейке табличного представления не работает

Я добавил UIButton в свою ячейку представления таблицы с автоматическим размещением, но ограничение высоты UIButton не работает (уже установлено> =)

введите здесь описание изображения

Ниже приведены мои настройки ограничения автоматического раскладки,

введите здесь описание изображения

Ниже представлен дизайн ячейки xib,

введите здесь описание изображения


person Vandit Mehta    schedule 06.02.2018    source источник
comment
какую высоту строки вы даете ячейке UITableView?   -  person kerry    schedule 06.02.2018
comment
вы используете статический / динамический ?? см. соответствующий Кодекс   -  person Sh_Khan    schedule 06.02.2018
comment
Добавлена ​​динамическая высота в ячейку UITableView   -  person Vandit Mehta    schedule 06.02.2018
comment
, в любом случае его внутренний размер должен работать   -  person Sh_Khan    schedule 06.02.2018
comment
@Sh_Khan, ты не понимаешь, можешь предложить мне какую-то ссылку или что-то еще?   -  person Vandit Mehta    schedule 06.02.2018
comment
опубликуйте свой код автозаполнения   -  person Sh_Khan    schedule 06.02.2018
comment
покажите свои ограничения ... очевидно, проблема в ваших настройках, а не в автоматическом раскладке   -  person Milan Nosáľ    schedule 06.02.2018
comment
Можете ли вы снимать с экрана дизайн XIB   -  person Sh_Khan    schedule 06.02.2018
comment
со скриншота кажется, что вы получили именно то, что указали .. в чем ваша проблема?   -  person Milan Nosáľ    schedule 06.02.2018
comment
@ MilanNosáľ, проблема в первом скриншоте.   -  person Vandit Mehta    schedule 06.02.2018
comment
первый скриншот выглядит точно так же, как ваш прототип, только не адаптируется к текстам кнопок   -  person Milan Nosáľ    schedule 06.02.2018
comment
да, я думаю, что ограничение размера кнопки у меня не работает   -  person Vandit Mehta    schedule 06.02.2018


Ответы (1)


Вам нужно будет реализовать свой собственный подкласс UIButton, который предоставит то, что вы хотите. Вы можете использовать следующую реализацию TitleAdaptingButton, она переопределяет intrinsicContentSize для адаптации к тексту в метке заголовка даже по вертикальной оси:

class TitleAdaptingButton: UIButton {

    override var bounds: CGRect {
        didSet {
            if !oldValue.equalTo(bounds) {
                invalidateIntrinsicContentSize()
            }
        }
    }

    override var intrinsicContentSize: CGSize {
        get {
            let labelSize = titleLabel!.sizeThatFits(CGSize(width: frame.width - (titleEdgeInsets.left + titleEdgeInsets.right), height: .greatestFiniteMagnitude))
            let desiredButtonSize = CGSize(width: labelSize.width + contentEdgeInsets.left + contentEdgeInsets.right, height: labelSize.height + contentEdgeInsets.top + contentEdgeInsets.bottom)
            return desiredButtonSize
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        self.titleLabel?.numberOfLines = 0
        // if you want the text centered
        //        self.titleLabel?.textAlignment = .center
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.titleLabel?.numberOfLines = 0
        // if you want the text centered
        //        self.titleLabel?.textAlignment = .center
    }
}

Как только вы добавите этот класс в свой проект, просто установите его как собственный класс для каждой из ваших кнопок:

введите здесь описание изображения

Но помните, чтобы кнопки могли адаптироваться, ячейке нужно разрешить определять свой собственный размер, поэтому вы должны использовать следующее на своем tableView:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44 // or your better estimation
person Milan Nosáľ    schedule 06.02.2018