При использовании ScrollView.zoom я получаю разные результаты от нажатия кнопки до вызова функции

#ios #swift #xcode #uiscrollview

#iOS #swift #xcode — код #uiscrollview

Вопрос:

Я пытаюсь увеличить масштаб до кнопки в UIScrollView. Первая функция — это та, которую я запускаю, если перехожу к vc, вторая запускается с помощью кнопки в представлении.

При выполнении второй функции она работает идеально и правильно центрируется

Однако на первом, несмотря на идентичный код, он имеет смещение в x примерно на 40-50 пикселей (показывает точку слева от кнопки, а не какую-либо ее часть), хотя это смещение изменяется в зависимости от кнопки.

 func moveScrollviewToRoom(){
    scrollView.zoom(to: artButton.frame, animated: true)
}

@IBAction func moveScrollview(_ sender: Any) {
    scrollView.zoom(to: artButton.frame, animated: true)
}
 

Функция была вызвана здесь:

 override func viewDidLoad() {
    super.viewDidLoad()
    
    if moveToRoom != "" {
        moveScrollviewToRoom()
       }
 

Любая помощь будет с благодарностью

Приветствия!

Комментарии:

1. Когда вы звоните moveScrollviewToRoom() ? Скорее всего, это произойдет до того, как авто-макет завершит настройку представления. Попробуйте переместить его в viewDidAppear() .

2. Привет, Дон, это было вызвано в super.viewDidLoad() через оператор if . Я обновил вопрос, чтобы показать

Ответ №1:

Две точки…

1 — Представления и подвиды еще не были расположены с помощью автоматической компоновки viewDidLoad() , поэтому artButton.frame они будут неправильными.

2 — Вызов любой функции, которая анимирует представление, viewDidLoad() не даст желаемых результатов, потому что представление еще даже не видно.

Переместите свой вызов на viewDidAppear() :

 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    if moveToRoom != "" {
        moveScrollviewToRoom()
    }

}