Я пытаюсь построить это:
Но вместо этого у меня есть это:
Я еще не начал работать над цветом фона или изменять цвет фона слайда, когда он еще выбран.
Моя ошибка сейчас в том, что я не могу правильно подобрать размеры (вы можете сказать, что когда я прокручиваю до конца, он останавливается на слайде 2).
Как сделать так, чтобы рамка и слайды соответствовали друг другу? (каждый слайд имеет ширину 188 и высоту 153).
Вот мой код:
func setupSlideScrollView(slides : [Slide]) {
scrollView.frame = CGRect(x: 0, y: 0, width: 200, height: 160)
scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count), height: 153)
scrollView.isPagingEnabled = true
for i in 0 ..< 3 {
slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: 188, height: 153)
slides[i].backgroundColor = UIColor.red
scrollView.addSubview(slides[i])
}
}
Для всего кода я следую этому руководству (кроме шага 10+, так как мне не нужна анимация): https://medium.com/@anitaa_1990/create-a-horizontal-paging-uiscrollview-with-uipagecontrol-swift-4-xcode-9-a3dddc845e92
Вы должны добавить пространство между двумя слайдами в параметре ширины прокрутки.
В прокрутке размер контента — это общий размер контента, который вы добавляете. поэтому, если между двумя слайдами есть пространство или если у вас есть начальное и конечное пространство, вам нужно добавить это общее пространство в размер содержимого прокрутки.
Например, если расстояние между двумя слайдами равно 10, измененный размер содержимого scrollView будет таким, как показано ниже.
scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count) + CGFloat((slides.count - 1) * 10), height: 153)
Вы не даете правильную рамку ячейкам или билетам внутри прокрутки.
var lastCellMaxX: CGFloat = 0
var constantSpacingBetweenCell: CGFloat = 10
for i in 0 ..< 3 {
slides[i].frame = CGRect(x: lastCellMaxX, y: 0, width: 188, height: 153)
slides[i].backgroundColor = UIColor.red
scrollView.addSubview(slides[i])
lastCellMaxX += 188 + constantSpacingBetweenCell
}
Я не понял, что такое view.frame, и я думаю, что в вашем случае это тоже бесполезно. Сохраните lastcellMaxX, который представляет собой cell.origin.x + cellwidth + spacingBetweenCell, Это будет x при предоставлении кадра для следующего вида
Это все исправило! Спасибо
По какой-то причине мой pageControl больше не отражает, на каком слайде я нахожусь. Это все еще как-то связано с использованием view.frame? Вот мой код ``` func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) } ```
Это сработало! Спасибо. У меня все еще есть одна проблема... Теперь пространство между каждым слайдом слишком велико. Как уменьшить только поля?