по поводу изначальной задачи тут есть несколько вариантов:
1) отслеживать viewDidLayoutSubviews() у вьюконтроллера
2) отслеживать layouSubviews у стеквью или ее дочерних вьюшек (чтобы в них самих тень и настраивать
3) делать stackview.layoutIfNeeded() в методе layoutSubviews() у вьюшки, чтобы принудительно пересчитать размеры элементов стеквью
4) поместить интерфейс на общий контейнер и установить параметры тени на него, а не на элементы (тогда вообще не придется отлеживать никакие события изменений фреймов) но это будет работать только если тени у всех объектов одинаковые