Как я могу найти superview/parentviewcontroller представления внутри стека

Надеюсь, это не слишком запутанно.

У меня есть контроллер основного представления (MainView) с представлением стека в нижней части представления, а внутри представления стека у меня есть три представления. Внутри одного из представлений (давайте назовем его footerView) я добавляю немного tooltipView, а поскольку footerView расположен внутри стека в нижней части MainView, оно частично перекрывается с другими представлениями. Я хочу, чтобы tooltipView был на вершине всех представлений, но это не работает. Внутри footerView - у него нет superview (я полагаю, потому что он находится внутри стека), поэтому я не могу использовать parentView.bringSubviewToFront(childView).

Что я мог сделать вместо этого? Является ли делегирование через слои единственным способом?


person vanilla_splsh    schedule 21.03.2019    source источник


Ответы (2)


Вы можете вручную установить zPosition каждого слоя. Значение по умолчанию равно 0, поэтому вы не можете получить желаемое значение, не управляя им вручную. В качестве примера вы можете попробовать

tooltipView.layer.zPosition = 1

or

tooltipView.layer.zPosition = .greatestFiniteMagnitude

Установка его на 1 сделает его выше других представлений, которые по умолчанию равны 0, или установка его на .greatestFiniteMagnitude всегда будет располагаться впереди.

Ознакомьтесь с этим ответом на zPostion и документация Apple по zPostion.

person Tommy    schedule 21.03.2019

Ответ Томми действительно помог, но еще одна вещь, которая помогла, заключалась в том, что я создавал свой tooltipView до того, как footerView закончил настройку - поэтому superview был nil. Я переместил инициализацию tooltipView внутрь func layoutSubviews(), и это работает.

Но ТАКЖЕ убедитесь, что вы сняли флажок clip to bounds. Вот почему, что бы я ни делал с zPosition, ничего не изменилось.

person vanilla_splsh    schedule 22.03.2019