Как изменить размер UIScrollView?

Я пытаюсь построить это:

Как изменить размер UIScrollView?

Но вместо этого у меня есть это: Как изменить размер UIScrollView?

Я еще не начал работать над цветом фона или изменять цвет фона слайда, когда он еще выбран.

Моя ошибка сейчас в том, что я не могу правильно подобрать размеры (вы можете сказать, что когда я прокручиваю до конца, он останавливается на слайде 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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны добавить пространство между двумя слайдами в параметре ширины прокрутки.

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

Например, если расстояние между двумя слайдами равно 10, измененный размер содержимого scrollView будет таким, как показано ниже.

scrollView.contentSize = CGSize(width: 188 * CGFloat(slides.count) + CGFloat((slides.count - 1) * 10), height: 153)

Это сработало! Спасибо. У меня все еще есть одна проблема... Теперь пространство между каждым слайдом слишком велико. Как уменьшить только поля?

Richard Reis 21.03.2019 06:59
Ответ принят как подходящий

Вы не даете правильную рамку ячейкам или билетам внутри прокрутки.

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 при предоставлении кадра для следующего вида

Это все исправило! Спасибо

Richard Reis 21.03.2019 21:13

По какой-то причине мой pageControl больше не отражает, на каком слайде я нахожусь. Это все еще как-то связано с использованием view.frame? Вот мой код ``` func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) } ```

Richard Reis 21.03.2019 22:48

Другие вопросы по теме