Пейджинг с ScrollView с использованием напрямую раскадровки вместо создания .xib файлов - PullRequest
0 голосов
/ 06 июня 2018

Извините, заранее, это длинный вопрос, но я хотел объяснить как можно лучше.

Мне нужно реализовать пошаговое руководство (руководство по запуску в первый раз) для проекта, который будет показан толькопользователь впервые запускает приложение.

Я реализовал его, создав файл .xib, где я просто создавал представление для каждого элемента, который мне нужно реализовать для пошагового руководства, создавая объекты, ссылающиеся нак .xib модели.

Но теперь я должен реализовать это без использования файлов .xib, где мне нужно сделать это через раскадровку.На этот раз я вставил scrollView, а затем поместил в него другой вид с объектами, которые мне понадобятся, такими как (надписи, изображения, кнопки и т. Д.), Но он не работает, хотя я могу создать всеобъекты, копируя вид прямо под scrollView.Когда я пытаюсь расширить ширину scrollView со всеми созданными представлениями, чтобы я мог выполнять разбиение по страницам, он не создает каждое представление рядом друг с другом, а показывает только последний объект (представление) в симуляторе, когда они складываются вертикально, и я не могу выполнить подкачку.

Теперь я предоставляю пример кода, чтобы показать, как я пытаюсь реализовать это:

import UIKit

class DenemeViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var pageControl: UIPageControl!

@IBOutlet weak var repeatingView: UIView!

var viewArray = [UIView]()

override func viewDidLoad() {
    super.viewDidLoad()

    let temporaryView = repeatingView
    temporaryView?.backgroundColor = .black
    viewArray.append(temporaryView!)

    let temporaryViewTwo = repeatingView
    temporaryViewTwo?.backgroundColor = .blue
    viewArray.append(temporaryViewTwo!)

    pageControl.numberOfPages = viewArray.count
    pageControl.currentPage = 0
    view.bringSubview(toFront: pageControl)

    setupScrollView(items: viewArray)
}

func setupScrollView(items: [UIView]) {
    scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
    scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(items.count), height: view.frame.height)
    scrollView.isPagingEnabled = true

    for i in 0..<items.count {
        items[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
        scrollView.addSubview(items[i])
    }
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
    pageControl.currentPage = Int(pageIndex)
}
}

Как вы можете видеть, я сначала создаю два разных представленияв viewDidLoad, ссылаясь на «repeatatingView», которое является выходом представления внутри scrollView на раскадровке.Затем я возвращаю их в массив и пытаюсь реализовать подпредставления scrollView с представлениями.

Я ожидал увидеть scrollView, начинающийся с представления с черным фоном, и пока я делаю постраничное перелистывание, а затем представление с синим фономдолжно появиться.

Когда я запускаю это, я вижу только синий вид, и я не могу делать какие-либо листание или прокрутку.

Storyboard Hierarchy

...