Было бы замечательно, если бы вы предоставили полный код, но на основе приведенного здесь кода приведены предложения.
Поскольку функцию layoutSubviews
можно вызывать несколько раз, вам следует переместить их внутрь viewDidLoad
.
override func viewDidLoad() {
...
for view in authenticationViews {
addSubview(view.button)
}
}
Чтобы обновить кадры видов на основе изменения макета, необходимо поместить их в viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var offsetY = CGFloat(0)
for view in authenticationViews {
view.button.frame = CGRect(x: 0, y: offsetY, width: frame.size.width, height: buttonHeight)
offsetY += buttonsDistance + buttonHeight
}
height = offsetY
}