2016-06-10 8 views
0

Я создаю очень простой подробный вид, в котором есть несколько фотографий, которые пользователь может прокрутить вверху, с некоторыми подробностями по имени элемента внизу. Однако мой Scrollview не страницу в нужное место, а так:UIScrollView не соответствует правильному расстоянию поискового вызова

enter image description here

Мой Scrollview рамочка & кадр из его подвидов устанавливаются следующим образом:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pictures.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height/CGFloat(2)) 
    self.pictures.clipsToBounds = false 
    let width = pictures.frame.width 
    let height = pictures.frame.height 



    /* 

    let view1 = UIView(frame: CGRectMake(pictures.frame.origin.x, 0, scrollViewWidth, scrollViewHeight)) 
    let view2 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth, 0, scrollViewWidth, scrollViewHeight)) 
    let view3 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth * 2, 0, scrollViewWidth, scrollViewHeight)) 
    let view4 = UIView(frame: CGRectMake(pictures.frame.origin.x + scrollViewWidth * 3, 0, scrollViewWidth, scrollViewHeight)) 

    */ 

    for index in 0...2 { 
     let frame = CGRectMake(width * CGFloat(index), 0, width, height) 
     let view = UIView(frame: frame) 
     views.append(view) 
     pictures.addSubview(view) 
    } 

    views[0].backgroundColor = UIColor.redColor() 
    views[1].backgroundColor = UIColor.blueColor() 
    views[2].backgroundColor = UIColor.orangeColor() 


    pictures.delegate = self 
    pictures.contentSize = CGSizeMake(width * CGFloat(views.count), height) 


} 

Кто-нибудь есть какие-либо предложения, как как я мог это поместиться? Исправлена ​​ли неправильная реализация прокрутки?

+0

Считаете ли вы использование 'UICollectionView' вместо' UIScrollView'? – Magoo

+0

Как бы включить интерфейс типа слайд-шоу с UICollectionView? –

+0

'UICollectionView' основан на' UIScrollView' и поэтому имеет 'pagingEnabled', он также может прокручивать по горизонтали, используя его flowlayout – Magoo

ответ

0

Проблема заключается в том, что вы пытаетесь получить доступ к self.view.frame в функции viewDidLoad(). В тот момент, когда он называется взглядами, еще не выложены должным образом. Рамка просмотра будет иметь размер, который вы указали в раскадровке, возможно {0, 0, 600, 600}.

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

+1

, к сожалению, перемещение кода инициализации в viewWillAppear не устраняет проблему, хотя это было хорошее предположение:/ –

+0

Я избегая автоопределения, количество просмотров, которое будет прокручиваться (и, следовательно, размер содержимого scrollView), будет определяться тем, сколько изображений загружено. Большая часть этого является динамической, поэтому я решил сделать это программно –

+0

viewDidLoad должен иметь правильный размер изображения, но должна использоваться согласованная маска авторазмера с гибкой высотой, шириной и левым краем. viewWillAppear также не является хорошим местом для кода макета. – Magoo

0

Вы должны добавить +20 в свою ширину, потому что в scrollView некоторое пространство доступно между двумя страницами. Итак, добавьте 20, он может решить вашу проблему.