Я строю интерфейс в 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
). Представляется, что в представлении отладки не отображаются перекрывающиеся слои:
В идеале я хотел бы в конечном итоге добавить распознаватель жестов к этому представлению, но интересно, навсегда ли это запретит мне доступ к представлениям, которые находятся дальше в фоновом режиме? Можно ли перекрывать интерактивные представления, как это, или я как-то напортачу цепочку респондента?