Как добавить полосу прокрутки для ViewController

swift

#1

Доброй ночи Товарищи!
Может кто сможет подсказать, пишу приложение, изначально есть несколько необходимых для заполнения TextField, но также есть опциональные, которые не отображаются пока их не отметят как желаемые для заполнения, так вот, к чему я все это, когда пользователь выбирает все поля, то они не влазят в View.

Пробовал использовать UIScrollView, все константы и объекты создаю програмнно, указал у него констреинты по краям view контролера, и в него уже добавлял все остальное, но что-то я возможно не понимаю, так как разницы я не увидел.
Если кто-то сталкивался и сможет помочь, буду присного благодарен, спасибо)


#2

Ну тут только ScrollView надо использовать.


#3

Может сможете подсказать!)
Вот в так духе я создаю scrollView и добавляю в него эелементы, но я не разу не работал со scroll view и не могу понять, что конкретно я делая не так, почему когда объекты выходят за пределы, они не скролятся!?)

private func constrains() {
        
        let scrollView: UIScrollView = {
            let scroll = UIScrollView()
            scroll.translatesAutoresizingMaskIntoConstraints = false
            return scroll
        }()
        self.view.addSubview(scrollView)
        
        scrollView.addSubview(userTextField)
        scrollView.addSubview(titleTextField)
        scrollView.addSubview(messageTextView)
        scrollView.addSubview(devicesTextField)
        scrollView.addSubview(urlTextField)
        scrollView.addSubview(urlTitleTextField)
        scrollView.addSubview(priorityButton)
        scrollView.addSubview(soundButton)
        scrollView.addSubview(timestampButton)
        scrollView.addSubview(sendButton)

        userTextField.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
        userTextField.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 12).isActive = true
        userTextField.widthAnchor.constraint(equalTo: scrollView.widthAnchor, constant: -20).isActive = true
        userTextField.heightAnchor.constraint(equalToConstant: 40).isActive = true
        
        titleTextField.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
        titleTextField.topAnchor.constraint(equalTo: userTextField.bottomAnchor, constant: 8).isActive = true
        titleTextField.widthAnchor.constraint(equalTo: scrollView.widthAnchor, constant: -20).isActive = true
        titleTextField.heightAnchor.constraint(equalToConstant: 40).isActive = true
}

#4

у вас скорее всего констраинты для scrollView не выставлены


#5

Можно попробовать для начала проще:

  1. Создать скролвью в сториборде на нужном котроллере и растянуть на весь котроллер.
  2. Добавить внутрь скролвью обычный вью.
  3. Добавить во вью все свои элементы с котроллера.
    Должно получиться примерно так:
    23

и всё должно работать (ваш код есстественно закоментить надо)

  1. Самый лучший вариант: смотреть уроки Ивана - там всё это есть подробно. :slight_smile:

Если вы только начинаете, то проще и понятнее для начала работать с визуальной сотавляющей (сториборд) для понимании “физики” процессов. А потом переходить к детальной кодировке.


#6

Потому что нужно определить contentSize у scrollView.


#7

нет, я просто забыл этот участок кода поместить, извиняюсь!)

scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

#8

А вот вы как никогда правы!!! Спасибо!)
Может сможете подсказать еще вопрос, как мне сделать его активным, только тогда, когда появляется n-e количество объектов которые не влазят на экран, у меня есть идея, сравнивать при каждом добавлении элемента расстояние до его bottom от view.top, если оно больше, то активируем contentSize!)
Я правда не знаю, можно так или нет! Сейчас буду искать!) Но если вы ответите раньше чем я, то эт будет шикарно!)))


#9

так, сделал)))
Еще вопрос)
Как можно регулировать расстояние от bottom , до bottom последнего элемента, чтобы не было большого расстояния!?)
Прикладываю фото!


Тип такоо, и Стобы он автоматически возвращался к концу!?)


#10

Выставьте последнему элементу нижний констрейнт до конца scrollView, так будет регулироваться промежуток.