Проблема с перекрывающимися UIViews и интерактивностью с UIKit / Swift - PullRequest
0 голосов
/ 15 мая 2019

Я строю интерфейс в Swift и UIKit для iOS. Все мои взгляды построены программно. У меня возникла проблема, когда UIView, который перекрывает другой UIView (но не полностью покрывает его), не позволяет проходить никаким событиям касания. Макет выглядит так:

Панель навигации внизу представляет собой пользовательский вид и работает нормально. Нажатие на эти кнопки изменяет активное представление за ним (текущее представление - TextView с подсветкой синтаксиса SQL). Над ним UILabel (с текстом «Связано») и UIView (круг с градиентным фоном). Я буду называть этот элемент «ButtonView», а метку - «StatusView». «StatusView» привязан к панели навигации и вмещающему представлению, а «ButtonView» привязан к панели навигации и «StatusView».

Это соответствующий код макета:

            view.addSubview(navBar!)
            view.addSubview(status)
            view.addSubview(button)

            status.translatesAutoresizingMaskIntoConstraints = false
            status.layer.masksToBounds = true
            status.text = "Example String"
            status.textColor = .white
            status.layer.cornerRadius = 20.0
            status.layoutMargins = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 10.0, right: 10.0)

            button.translatesAutoresizingMaskIntoConstraints = false
            button.layer.masksToBounds =    true
            button.layer.cornerRadius = 35.0
    //        button.isUserInteractionEnabled = false
    //        button.backgroundColor = .white

            NSLayoutConstraint.activate([
                status.bottomAnchor.constraint(equalTo: navBar!.topAnchor, constant: -10.0),
                status.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10.0),
                status.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -90.0),
                status.heightAnchor.constraint(equalToConstant: 50.0),
                button.bottomAnchor.constraint(equalTo: navBar!.topAnchor, constant: -10.0),
                button.leadingAnchor.constraint(equalTo: status.trailingAnchor, constant: 10.0),
                button.widthAnchor.constraint(equalToConstant: 70.0),
                button.heightAnchor.constraint(equalToConstant: 70.0)
                ])

Предполагаемое поведение заключается в том, что даже при наличии «ButtonView» представление SQL можно по-прежнему нажимать и редактировать. Однако, когда присутствует «ButtonView», представление SQL больше не может быть сфокусировано. Если для свойства isUserInteractionEnabled ButtonView установлено значение false или удален ButtonView, все будет работать правильно. «StatusView», по-видимому, не имеет каких-либо побочных эффектов без необходимости редактирования каких-либо его свойств. (Обратите внимание, что в настоящее время нет никакого жестового поведения, назначенного «ButtonView», и это не UIButton). Представляется, что в представлении отладки не отображаются перекрывающиеся слои:

В идеале я хотел бы в конечном итоге добавить распознаватель жестов к этому представлению, но интересно, навсегда ли это запретит мне доступ к представлениям, которые находятся дальше в фоновом режиме? Можно ли перекрывать интерактивные представления, как это, или я как-то напортачу цепочку респондента?

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