2015-02-06 1 views
0

Video of the issue!Twitter-подобный UIScrollView с ViewControllers как страницы

Примера того, что я имею в виду Twitter-как UIScrollView:

Twitter Image

Я в основном он работает, но у меня есть эта небольшая вопиющая проблема и Я не знаю, откуда он. Я проверил все ограничения и значения для моих двух контроллеров представления, но что-то не работает.

Короче говоря,

код, который создает NavBar, а затем заполнит его стороне две ViewControllers бок:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var navBar: UINavigationBar = UINavigationBar(frame: CGRectMake(0, 0, self.view.bounds.width, 64)) 

    navBar.barTintColor = UIColor.blackColor() 
    navBar.translucent = false 

    //Creating some shorthand for these values 
    var wBounds = self.view.bounds.width 
    var hBounds = self.view.bounds.height 

    // This houses all of the UIViews/content 
    scrollView = UIScrollView() 
    scrollView.backgroundColor = UIColor.clearColor() 
    scrollView.frame = self.view.frame 
    scrollView.pagingEnabled = true 
    scrollView.showsHorizontalScrollIndicator = false 
    scrollView.delegate = self 
    scrollView.bounces = false 
    self.view.addSubview(scrollView) 

    self.scrollView.contentSize = CGSize(width: self.view.bounds.size.width * 2, height: hBounds) 

    //Putting a subview in the navigationbar to hold the titles and page dots 
    navbarView = UIView() 

    //Paging control is added to a subview in the uinavigationcontroller 
    pageControl = UIPageControl() 
    pageControl.frame = CGRect(x: 0, y: 35, width: 0, height: 0) 
    pageControl.pageIndicatorTintColor = UIColor(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.3) 
    pageControl.currentPageIndicatorTintColor = UIColor.whiteColor() 
    pageControl.numberOfPages = 2 
    pageControl.currentPage = 0 
    self.navbarView.addSubview(pageControl) 


    //Titles for the nav controller (also added to a subview in the uinavigationcontroller) 
    //Setting size for the titles. FYI changing width will break the paging fades/movement 
    navTitleLabel1 = UILabel() 
    navTitleLabel1.frame = CGRect(x: 0, y: 8, width: wBounds, height: 20) 
    navTitleLabel1.textColor = UIColor.whiteColor() 
    navTitleLabel1.textAlignment = NSTextAlignment.Center 
    navTitleLabel1.text = "Title 1" 
    self.navbarView.addSubview(navTitleLabel1) 

    navTitleLabel2 = UILabel() 
    navTitleLabel2.alpha = 0.0 
    navTitleLabel2.frame = CGRect(x: 100, y: 8, width: wBounds, height: 20) 
    navTitleLabel2.textColor = UIColor.whiteColor() 
    navTitleLabel2.textAlignment = NSTextAlignment.Center 
    navTitleLabel2.text = "Title 2" 
    self.navbarView.addSubview(navTitleLabel2) 

    //Views for the scrolling view 
    //This is where the content of your views goes (or you can subclass these and add them to ScrollView) 

    feedViewController = storyboard?.instantiateViewControllerWithIdentifier("FeedController") as FeedViewController 

    view1 = feedViewController.view 

    addChildViewController(feedViewController) 
    feedViewController.didMoveToParentViewController(self) 

    view1.frame = CGRectMake(0, 0, wBounds, hBounds) 
    self.scrollView.addSubview(view1) 
    self.scrollView.bringSubviewToFront(view1) 

    //Notice the x position increases per number of views 

    secondViewController = storyboard?.instantiateViewControllerWithIdentifier("SecondController") as SecondViewController 

    view2 = secondViewController.view 

    addChildViewController(secondViewController) 
    secondViewController.didMoveToParentViewController(self) 

    view2.frame = CGRectMake(wBounds, 0, wBounds, hBounds) 
    self.scrollView.addSubview(view2) 
    self.scrollView.bringSubviewToFront(view2) 

    navBar.addSubview(navbarView) 
    self.view.addSubview(navBar) 
} 

Я смотрел на мою раскадровки и оба ViewControllers кажутся идентичными в отношении к их ограничениям.

Я знаю, что это проблема, потому что оба ViewControllers заполнены UITableViews. Когда я просматриваю SecondViewController, он работает отлично. Когда я просматриваю FeedViewController, на вершине есть небольшое белое пространство, от которого я не могу избавиться, и он показывает, что текст отключается. Я давно застрял в этом, и если есть какая-то другая информация, я с радостью предоставил ее.

Редактировать: Включено видео проблемы. Если бы я мог, я бы напомнил этот вопрос прямо сейчас. Я не понимаю причину

Обновление: после замены обеих позиций ViewController я заметил, что проблема не связана ни с ViewController. Проблема заключается в том, что страница 1 установлена ​​ниже. При замене первоначальный SecondViewController также испытывал такое же поведение.

+0

Возможно, я просто не совсем понимаю, как subviews добавляются в представления. – David

+0

Я полагаю, что я всегда мог бы сделать ограничения на левом, чтобы подняться на 20, но я не думаю, что должен был это сделать. Какая загадочная часть обо всем этом – David

ответ

0

Итак, я думаю, что каждый, кто это реализует, в какой-то момент сталкивается с этой проблемой. Проблема заключается не в первом ViewController. Просто отрегулируйте ограничение на 44 с вершины. Проблема связана со вторым ViewController, и это не столько проблема, когда вы понимаете, как они работают. Технически, он выключен в сторону и, следовательно, его верхнее ограничение не прилипает к панели навигации, поэтому у вас есть ограничение - 20. Который, в зависимости от того, как вы первоначально разместили свои ограничения, может дать вам эту кажущуюся проблему.

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

TL; DR: Чтобы все было бесшовно, ваша вторая, третья, четвертая, пятая и т. Д. Контроллеры просмотра страниц нуждаются в ограничении + 20 вашего первого контроллера просмотра. С моей настройкой я использую ограничение 44 для моего первого View Controller и, следовательно, 64 для второго

Смежные вопросы