Что такое 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)