Как я могу представить представление перед другим видом в Swift?

Ниже показано, как мои представления организованы в IB, top-> внизу при запуске приложения.

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

enter image description here

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

enter image description here

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

Я также попытался установить nameView.hidden = true, но это не работает.

Ответ 1

Если вы хотите перенести подпредставление на передний план, вы можете использовать:

SWIFT 4 ОБНОВЛЕНИЕ

self.view.bringSubviewToFront(yourView)

SWIFT 3 ОБНОВЛЕНИЕ

self.view.bringSubview(toFront: yourView)

Отправить вид назад: -

SWIFT 4 ОБНОВЛЕНИЕ

self.view.sendSubviewToBack(yourView)

SWIFT 3 ОБНОВЛЕНИЕ

self.view.sendSubview(toBack: yourView)

Ответ 2

Вы можете взять контроль над порядком subviews с помощью методов: bringSubviewToFront и sendSubviewToBack из супервизора.

Вы можете получить доступ ко всем подзонам, содержащимся в супервизии, используя массив self.view.subview.

Ответ 3

В Свифт 5

Вынести подвид на передний план

self.view.bringSubviewToFront(yourView)

Чтобы отправить подписку назад

self.view.sendSubviewToBack(yourView)

Ответ 4

Метод обновлен с момента быстрого 3

Что сработало для меня и, надеюсь, для вас используется:

YourView.bringSubview(toFront: yourelementA)
YourView.bringSubview(toFront: yourelementB)

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

YourView.sendSubview(toBack: yourelementC)

Я надеюсь, что это поможет