Кнопки в UIView не имеют эффекта при нажатии - PullRequest
0 голосов
/ 29 января 2019

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

Вот мои настройки: у меня есть пользовательский вид, в котором я установил 3 кнопки и добавил к ним ограничения

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

        let buttonSize: CGFloat = 90.0

        addSubview(photoButton)
        photoButton.anchor(top: nil, leading: nil, bottom: bottomAnchor, trailing: nil, padding: .init(top: 0, left: 0, bottom: 0, right: 0), size: .init(width: buttonSize, height: buttonSize))
        photoButton.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true

        addSubview(homeButton)
        homeButton.anchor(top: nil, leading: nil, bottom: bottomAnchor, trailing: photoButton.leadingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 20), size: .init(width: buttonSize, height: buttonSize))

        addSubview(profileButton)
        profileButton.anchor(top: nil, leading: photoButton.trailingAnchor, bottom: bottomAnchor, trailing: nil, padding: .init(top: 0, left: 20, bottom: 0, right: 0), size: .init(width: buttonSize, height: buttonSize))
    }

В контроллере основного вида я добавил цели для кнопок, чтобы вызватьфункции, когда они нажаты.

let buttonView = HomeBottomControlsView()

, на мой взгляд, загрузил

        buttonView.homeButton.addTarget(self, action: #selector(openTrending), for: .touchUpInside)
        buttonView.profileButton.addTarget(self, action: #selector(openProfile), for: .touchUpInside)

        view.addSubview(overallStackView)
        view.addSubview(buttonView)

        overallStackView.translatesAutoresizingMaskIntoConstraints = false
        overallStackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)
        overallStackView.isLayoutMarginsRelativeArrangement = true
        overallStackView.layoutMargins = .init(top: 10, left: 12, bottom: 95, right: 12)

        buttonStackView.anchor(top: overallStackView.bottomAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor, padding: .init(top: 0, left: 0, bottom: 0, right: 0), size: .init(width: 0, height: 0))

Кнопки работали ранее, пока я не начал играть с ограничениями автоматического размещения.Теперь я больше не могу заставить кнопки быть нажимаемыми.

В других вопросах я читал, что кнопки иногда не работают из-за проблем с исходными кадрами.Это проблемы здесь?

1 Ответ

0 голосов
/ 29 января 2019

Это представление уже занимает весь view

overallStackView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: view.leadingAnchor, bottom: view.safeAreaLayoutGuide.bottomAnchor, trailing: view.trailingAnchor)

, и вы устанавливаете верхний якорь buttonStackView в качестве нижнего якоря overallStackView.Вот почему кадры расположены неправильно.Вам нужно изменить ограничения как buttonStackView, так и overallStackView, чтобы они не перекрывали друг друга

...