Scrollview с автоматическим размещением программно

Я пытаюсь добавить в представление 2 UIScrollView. Я добавил одну прокрутку, и она отлично работала. Затем я добавил другую прокрутку. Но теперь он вылетает при первом просмотре прокрутки ..

func setupTopModelScrollView()
{

    var viewBindingsDictBoth = [String: AnyObject]()
    viewBindingsDictBoth["shortListedScrollView"] = shortListedScrollView
    viewBindingsDictBoth["scrollViewTopModels"] = scrollViewTopModels
    viewBindingsDictBoth["contentView"] = contentView
    viewBindingsDictBoth["contentViewShortListed"] = contentViewShortListed
    viewBindingsDictBoth["lblTitle"] = lblTitle
    viewBindingsDictBoth["mainView"] = self.view

    scrollViewTopModels = UIScrollView(frame:CGRectZero)

    scrollViewTopModels.sizeToFit()

    view.addSubview(scrollViewTopModels)

    scrollViewTopModels.backgroundColor = UIColor.blueColor()

    contentView = UIView()
    contentView.backgroundColor = UIColor.redColor()
    scrollViewTopModels.addSubview(contentView)

    view.translatesAutoresizingMaskIntoConstraints = false
    scrollViewTopModels.translatesAutoresizingMaskIntoConstraints = false
    contentView.translatesAutoresizingMaskIntoConstraints = false

    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[scrollViewTopModels]-0-|",options: [], metrics: nil,  views:viewBindingsDictBoth))

    let contentViewWidth : Int = arrTopModels.count * Int(SCREENWIDTH)

    scrollViewTopModels.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[contentView]-0-|",options: [], metrics: nil,  views:viewBindingsDictBoth))
    scrollViewTopModels.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[contentView]-0-|",options: [], metrics: nil,  views:viewBindingsDictBoth))

    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[contentView(\(contentViewWidth))]|",options: [], metrics: nil, views:viewBindingsDictBoth))
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[contentView(==scrollViewTopModels)]",options: [], metrics: nil, views:viewBindingsDictBoth))

    scrollViewTopModels.showsHorizontalScrollIndicator = false
    scrollViewTopModels.bounces = false
    scrollViewTopModels.pagingEnabled = true


    for i in 0..<arrTopModels.count
    {

        let topModelView = TopModelCell(frame:CGRectZero)
        contentView.addSubview(topModelView)

        let spaceFromLeft : Int = i * Int(SCREENWIDTH)

        topModelView.translatesAutoresizingMaskIntoConstraints = false
        topModelView.imgModel.image = UIImage(named: arrTopModels.objectAtIndex(i) as! String)

        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-\(spaceFromLeft)-[topModelView(\(SCREENWIDTH))]",options: [], metrics: nil, views:viewBindingsDictBoth))

        contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[topModelView(==contentView)]-0-|",options: [], metrics: nil,  views:viewBindingsDictBoth))

        print(topModelView)

        contentView.contentMode = UIViewContentMode.Redraw

    }

}

Я получаю эту ошибку и вылетает ..

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format: 
Unable to interpret '|' character, because the related view doesn't have a superview 
H:|-0-[scrollViewTopModels]-0-| 
                           ^'

Я застрял .. Если кто может помочь.

Заранее спасибо..


person Rythm    schedule 02.06.2016    source источник
comment
Ошибка звучит так, как будто ваша переменная представления не была добавлена ​​ни в какой супервизор. Перед добавлением ограничений у представления должен быть родитель.   -  person john_ryan    schedule 02.06.2016
comment
после комментария @john_ryan вы должны следовать этому: ›ваша переменная представления не находится в viewBindingsDictBoth. Таким образом, у вас также должен быть viewBindingsDictBoth [view] = view.   -  person maddy    schedule 03.06.2016


Ответы (1)


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

var viewBindingsDictBoth = [String: AnyObject]()
viewBindingsDictBoth["shortListedScrollView"] = shortListedScrollView
viewBindingsDictBoth["scrollViewTopModels"] = scrollViewTopModels
viewBindingsDictBoth["contentView"] = contentView
viewBindingsDictBoth["contentViewShortListed"] = contentViewShortListed
viewBindingsDictBoth["lblTitle"] = lblTitle
viewBindingsDictBoth["mainView"] = self.view

Мы должны написать этот код после распределения всех представлений ..

person Rythm    schedule 03.06.2016