Трудно сказать, как реализован UIStackView, но он может пытаться обновить свой макет при изменении isHidden
, даже если значение на самом деле не меняется.
Возможно, это ошибка UIKit, но в качестве обходного пути вы можете изменить реализацию resetSubviews(to:)
так, чтобы она устанавливала isHidden
только когда состояние действительно меняется.
private func resetSubviews(to view: UIView) {
view1.alpha = view == view1 ? 1 : 0
view2.alpha = view == view2 ? 1 : 0
view3.alpha = view == view3 ? 1 : 0
view4.alpha = view == view4 ? 1 : 0
let updateIsHiddenForView = { (viewToUpdate: UIView) in
let isHidden = view != viewToUpdate
if isHidden != viewToUpdate.isHidden {
viewToUpdate.isHidden = isHidden
}
}
updateIsHiddenForView(view1)
updateIsHiddenForView(view2)
updateIsHiddenForView(view3)
updateIsHiddenForView(view4)
}