Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Метка Swift Scroll View перемещается после переключения вида вкладки

Автор вопроса: Peter DuttonОтветов: 1

У меня есть панель вкладок, а в одном из представлений есть прокрутка. Я добавил метку к этому представлению прокрутки, но после загрузки она оказалась не в том месте. После того, как вы перейдете на другую вкладку и вернетесь, она сразу же окажется в правильном положении.

Вот код:

    scrollViewFunc()
    scrollView.addSubview(dateLbl)
    dateLbl.center = CGPoint(x: self.scrollView.center.x, y: self.scrollView.center.y + 100)

    func scrollViewFunc() {

    scrollView.translatesAutoresizingMaskIntoConstraints = false

    scrollView.contentSize.height = 800
    scrollView.backgroundColor = UIColor.brown
    self.view.addSubview(scrollView)

    //x,w,t,b
    scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

}

Я поместил его в viewDidLoad(), чтобы настроить вид прокрутки, а также viewWillAppear, но при загрузке все еще возникает проблема, связанная с тем, что он находится в неправильном месте.

Любой совет?

swiftscrollviewconstraintstabbar

Ответы

Ответ 1 · user614273

Вы назначаете фрейм своей метке до того, как у scrollView появится фрейм.

I.e dateLbl.center = CGPoint(x: self.scrollView.center.x, y: self.scrollView.center.y + 100)

Должен прийти после

    scrollView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

Кроме того, я бы не стал рассчитывать на то, что ограничения немедленно разрешат правильный фрейм, вы, вероятно, захотите также настроить dateLbl с ограничениями или установить фреймы в viewDidLayoutSubviews, когда вы знаете, что scrollView имеет правильный фрейм.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы