Слайдер изображений с использованием UIScrollView и Auto Layout - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь реализовать слайдер изображений, используя scrollView и pageControl, с изображениями, добавляемыми в scrollView программно с использованием метода .addSubView. Код выглядит следующим образом:

@IBOutlet weak var sliderScrollView: UIScrollView!
@IBOutlet weak var sliderPageControl: UIPageControl!
var images: [String] = ["0", "1", "2"]

func updateSlider() {
        sliderPageControl.numberOfPages = images.count

        for index in 0..<images.count {
            frame.origin.x = sliderScrollView.frame.size.width * CGFloat(index)
            print(sliderScrollView.frame.size.width)
            frame.size = sliderScrollView.frame.size

            let image = UIImageView(frame: frame)
            image.contentMode = .scaleAspectFill
            image.image = UIImage(named: cafeObject.images[index])
            sliderScrollView.addSubview(image)
        }
        sliderScrollView.contentSize = CGSize(width: sliderScrollView.frame.size.width * CGFloat(cafeObject.images.count), height: sliderScrollView.frame.size.height)
        sliderScrollView.delegate = self
        sliderPageControl.currentPage = 0
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width

    switch scrollView {
    case sliderScrollView:
        sliderPageControl.currentPage = Int(pageNumber)
    default:
        break
    }
}

Когда я создавал раскадровку на макете iPhone 8, приведенный выше код прекрасно работает для iPhone 8. Однако после запуска кода в iPhone 8 Plus фотография не адаптируется к новому размеру scrollView. Я добавил ограничения в scrollView так, чтобы верх, ведущий, трейлинг и низ были равны верху, лидеру, трейлингу и низу суперпредставления. При отладке я понял, что кадр UIImageView по-прежнему использует старую ширину, как на iPhone 8.

Есть ли обходной путь для этого либо программно, либо с помощью конструктора интерфейса? Спасибо!

1 Ответ

0 голосов
/ 30 июня 2018

Хорошо, мне удалось это исправить, поместив функцию updateSlider () в viewDidLayoutSubviews() вместо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...