Что такое contentOffset & contentInset ScrollView

У меня есть две путаницы в отношении ScrollView. Один из них - мой главный вопрос, другой - вторичная путаница.

1. Что именно contentOffse t & contentInset ScrollView. Я приведу более подробную информацию ниже.

2.I создаю ScrollView, но похоже, что scrollView не может катиться в любом направлении. Проблема с смещением? или вставка?. Я дам больше Подробности ниже

Подробности для вопроса 1:

Некоторое время contentOffset свойство и contentInset свойство кажутся большой разницей, но когда я пытаюсь реализовать некоторые функции, относящиеся к этим двум свойствам, я начинаю запутываться. И я делаю здесь простую иллюстрацию. Можете ли вы помочь мне понять, какая часть смещена, а какая часть - вставка: D

введите описание изображения здесь

Подробности для вопроса 2:

Я использую следующую функцию для добавления ScrollView

 func addScrollView(){
            // assign a new ScrollView to "scroll" class member 
            scroll = UIScrollView(frame: CGRectZero)
            scroll!.translatesAutoresizingMaskIntoConstraints = false
            // change it to gray color to help recognising 
            scroll!.backgroundColor = UIColor.grayColor()
            self.view.addSubview(scroll!)

            //add some constraints,[you can neglect following part]
            let x = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
            self.view.addConstraint(x)

            let y = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1/2, constant: 25)
            self.view.addConstraint(y)

            let left = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1, constant: 10)
            self.view.addConstraint(left)

            let upperSpacing = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 50)
            self.view.addConstraint(upperSpacing)

            let w = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 0, constant: 10)
            self.view.addConstraint(w)

            let h = NSLayoutConstraint(item: scroll!, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: scroll!, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0)
            self.view.addConstraint(h)
            print("add scroll view Successed")
        }

И он не умеет катиться. Он может содержать только несколько вещей (Buttons или TextFields...), чтобы заполнить его размер, а не помещать больше вещей в места, где мы не можем видеть.

Так возникают проблемы с установкой и установкой? Как я могу это исправить? И если я это сделаю, как я могу добавить вещи (кнопки...) к не показанным местам программно?

Надеюсь, вы скажете мне кое-что! С моей бесконечной ценностью! (Я имею в виду, действительно! Я блокирую себя здесь целыми днями!!!)

Ответы

Ответ 1

Несколько наблюдений:

  • contentOffset Здесь пользователь просматривает прокрутку в прокрутке. Это явно меняется по мере прокрутки пользователя. Обычно вы не изменяете это программно (если вы не хотите программно прокручивать где-нибудь, например, чтобы кнопка прокручивалась вверх).

  • contentInset состоит в том, насколько содержимое визуально вставляется в прокрутку (т.е. какие "поля" в пределах прокрутки). Обычно вы устанавливаете это один раз в IB или в viewDidLoad, когда создается представление прокрутки.

  • contentSize - насколько большой прокручиваемый контент. Обратите внимание, что при автозапуске вам не нужно указывать это вручную, а скорее рассчитывать ограничениями, которые вы указали между представлением прокрутки и его подзонами (и ограничениями для подзонов и между подзонами).

Чтобы обеспечить правильную работу прокрутки, это комбинация (a) bounds прокрутки, менее contentInset; и (b) contentSize, как рассчитано для вас из ограничений подсмотров.

Ответ 2

contentOffset указывает текущую позицию содержимого вида прокрутки относительно координат начала координат в верхнем левом углу. Вы не должны программно устанавливать это значение, если вы не хотите программно настроить положение прокрутки.

contentInset позволяет указывать поля вокруг содержимого в прокрутке. Вы можете указать маржу программно следующим образом:

scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0)