2017-02-17 19 views
1

Итак, я просмотрел почти все ответы StackOverflow на этот конкретный вопрос и даже просмотрел учебники, которые якобы научат вас, как использовать вид прокрутки, но это, кажется, не применяются для моего проекта ..UIScrollView не прокручивается вообще при добавлении программно в Swift?

Здесь это то, что я знаю до сих пор, для того, чтобы Scroll View правильно работал, вам сначала нужно предоставить ему размер контента. Это определяет прокручиваемую высоту и т. Д.

Я предоставил некоторый код, чтобы дать вам все лучшее представление о том, как я добавляю указанные элементы в свой scrollview. Если есть что-то, что я делаю неправильно, или если есть лучший способ сделать это, пожалуйста, дайте мне знать, я все еще довольно новичок в разработке Swift и iOS, и, на мой взгляд, мне кажется, что я делаю это правильно.

шаги я беру

  1. Создать элементы, которые я хочу, чтобы отобразить (полей ввода, Imageviews и т.д ..)
  2. Добавить сказал детали к мнению ViewController. (View.addsubview (и т.д ..))
  3. Создать Scrollview и установить его ограничение, чтобы быть таким же, как экран/зрение
  4. Добавьте наш взгляд всех элементов в нем в указанном виде прокрутки
  5. Расслабьтесь и все должно получиться отлично ?????

Вот мой код, я знаю, что это может быть длительным, но я думаю, что это может быть необходимо для того, что сфера моего вопроса понимается

class JobRegistrationController: UIViewController { 

// ... Omitted for clarity 
lazy var scrollView: UIScrollView = { 
    let view = UIScrollView(frame: UIScreen.main.bounds) 
    view.backgroundColor = .red 
    view.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height * 2) 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 

//... Omitted for clarity 

    let scrollContentView: UIView = { 
    let view = UIView() 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Need so that view controller is not behind nav controller 
    self.edgesForExtendedLayout = [] 

    view.addSubview(scrollView) 
    scrollView.addSubview(scrollContentView) 
    scrollContentView.addSubview(jobTypeField) 
    scrollContentView.addSubview(jobTypeDividerLine) 

    // x, y, width and height constraints 
    scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
    scrollView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 

    // x, y, width and height constraints 
    scrollContentView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    scrollContentView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    scrollContentView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
    scrollContentView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 

    // x, y, width and height constraints 
    jobTypeField.leftAnchor.constraint(equalTo: scrollContentView.leftAnchor, constant: 20).isActive = true 
    jobTypeField.topAnchor.constraint(equalTo: scrollContentView.topAnchor).isActive = true 
    jobTypeField.rightAnchor.constraint(equalTo: scrollContentView.rightAnchor, constant: -8).isActive = true 
    jobTypeField.heightAnchor.constraint(equalToConstant: 30).isActive = true 

    // x, y, width and height constraints 
    jobTypeDividerLine.leftAnchor.constraint(equalTo: scrollContentView.leftAnchor, constant: 20).isActive = true 
    jobTypeDividerLine.topAnchor.constraint(equalTo: jobTypeField.bottomAnchor).isActive = true 
    jobTypeDividerLine.rightAnchor.constraint(equalTo: scrollContentView.rightAnchor).isActive = true 
    jobTypeDividerLine.heightAnchor.constraint(equalToConstant: 0.5).isActive = true 

ответ

2
view.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height * 2) 

Вы должны попытаться войти в contentSize в консоли при попытке доступа к нему. Я не уверен, что вы устанавливаете правильный contentSize здесь, если self.view.bounds был рассчитан правильно, когда это вызвано в этот момент. Поскольку требуется время для расчета рамки self.view и оценок.

Попробуйте установить contentSizeпосле, вы добавили к нему фактический контент на основе фактического общего содержимого.

EDIT:

Добавить один UIView внутри scrollView, с ограничениями, установленными в верх-низ-выводные завершающего, и добавьте к нему подвидов. Кроме того, установите те же ограничения на scrollView на верхний нижний предел супервизора.

+0

Привет, спасибо за предложение.Когда я просматриваю, на мой взгляд, я вижу, что полоса прокрутки перемещается вверх и вниз, но содержимое моего представления не перемещается. –

+0

@EdwardLim Это еще одна проблема. Решение для этого состоит в том, чтобы поместить все ваши подпрограммы внутри одного UIView, чтобы вы включили единый UIView в качестве подсмотра внутри scrollView. Избегайте наличия всех подзонов внутри scrollView без единого UIView «scrollContentView» для всех них. В противном случае вы столкнетесь с массивными ошибками, как вы описали, например. –

+0

Привет, пожалуйста, предложите, как это сделать правильно? Я уже попытался добавить представление в прокрутку, но, похоже, он делает то же самое. –

2

Используйте этот метод в классе

override func viewDidLayoutSubviews() 
    { 
    scrollView.delegate = self 
    scrollView.contentSize = CGSize(width:self.view.frame.size.width, height: 1000) // set height according you 
    } 
+0

Привет, спасибо за предложение. Когда я просматриваю, на мой взгляд, я вижу, что полоса прокрутки перемещается вверх и вниз, но содержимое моего представления не перемещается. –

+0

Я думаю, что ваше представление не добавляется должным образом в виде прокрутки. Добавить Content View внутри scrollview. –

+0

Привет, у вас есть предложения по тому, как это сделать? Я сделал редактирование в своем коде, добавив просмотр содержимого прокрутки, но он делает то же самое –

Смежные вопросы