Как программно центрировать пользовательскую кнопку без ширины - PullRequest
0 голосов
/ 01 февраля 2019

В collectionviewCell у меня есть кнопка «MainButton» (подкласс UIButton):

var buttonTest: MainButton {
        let testBtn = MainButton(type: .custom)
        testBtn.setTitle("Save settings", for: .normal)
        testBtn.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        return testBtn
    } 

Далее, в моей функции настройки я ввожу базовый UIView, который будет удерживать мою кнопку.

let supportTest = UIView()
        supportTest.backgroundColor = .blue
        supportTest.translatesAutoresizingMaskIntoConstraints = false
        supportTest.clipsToBounds = true
        addSubview(supportTest)
        supportTest.anchor(top: nil, leading: leadingAnchor, bottom: nil, trailing: trailingAnchor)
        supportTest.topAnchor.constraint(equalTo: separator.bottomAnchor, constant: 20).isActive = true
        supportTest.heightAnchor.constraint(equalToConstant: 40).isActive = true 

Затем я добавляю в качестве подпредставления мою кнопку

supportTest.addSubview(buttonTest)

Но когда я ограничиваю ее по центру, эти две следующие строки приводят к ее падению.

buttonTest.anchor(top: nil, leading: leadingAnchor, bottom: nil, trailing: trailingAnchor)
buttonTest.centerXAnchor.constraint(equalTo: supportTest.centerXAnchor).isActive = true

Есть лиспособ правильно сделать эту кнопку по центру, не давая ей ширину?Потому что мой заголовок кнопки будет соответствовать по-разному, в зависимости от ее содержимого.Я подумал о представлении стека, с двумя "пустыми" представлениями, граничащими с ним ...

Скажите, что вы об этом думаете.

Вот как это выглядит на самом деле (2 последние строки каккомментарии конечно): https://imgur.com/n380XEA

1 Ответ

0 голосов
/ 01 февраля 2019

Сделайте его

lazy var buttonTest: MainButton = {
    let testBtn = MainButton(type: .custom)
    testBtn.setTitle("Save settings", for: .normal)
    testBtn.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    return testBtn
}()

, так как оно в настоящий момент является вычисляемым свойством, поэтому экземпляр, который вы добавляете к supportTest, отличается от 1, для которого вы устанавливаете ограничения, и последний не имеет суперпредставления, следовательно,crash

Кроме того, вы устанавливаете для кнопки ограничения ведущего, конечного и centerX, вам нужно ограничение y (top / bottom / centerY)

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