Похоже, проблема в том, что пользовательский интерфейс "обновляется" между точкой, где вы удаляете текущие подпредставления, и когда вы добавляете новые подпредставления.Таким образом, mainStack
становится очень коротким, что приводит к тому, что представление содержимого недостаточно высокое, чтобы требовать прокрутки, и представление прокрутки настраивается соответствующим образом.
Вы можете либо подождать, но и удалить подпредставления, пока у вас не появится новыйподпредставлений и удалите / добавьте в том же самом функционале, или замените подпредставления ясным представлением «заполнителя».
Второй вариант может выглядеть следующим образом:
func replaceViewsWithPlaceholderView() -> Void {
// get an array of the current views in the stack
let viewsToRemove = mainStack.arrangedSubviews
// create a clear view
let v = UIView()
v.translatesAutoresizingMaskIntoConstraints = false
v.backgroundColor = .clear
// needs a width
v.widthAnchor.constraint(equalToConstant: 1).isActive = true
// constrain the height of the "place holder" view to the current height of the stack view
v.heightAnchor.constraint(equalToConstant: mainStack.frame.height).isActive = true
// add the "place holder" view to the stack
mainStack.addArrangedSubview(v)
// remove the views that were in the stack
viewsToRemove.forEach {
$0.removeFromSuperview()
}
}
Тогда в вашем функционалеэто добавляет новые подпредставления, основанные на выбранной вкладке, сначала:
// remove the "place holder" view
mainStack.arrangedSubviews.forEach {
$0.removeFromSuperview()
}
с последующим (вероятно, цикл .forEach
) добавлением новых подпредставлений в main.Stack
.
Конечно, еслиВы прокрутили так, что ваши «вкладки» находятся в верхней части представления прокрутки, а «вкладка B» не имеет достаточного количества подпредставлений, чтобы требовать прокрутки, представление прокрутки снова настроится - но только до точки, где нижняя часть содержимоговид находится внизу прокрутки.