Проблема с макетом ограничений просмотра прокрутки - PullRequest
0 голосов
/ 12 октября 2019

В проекте я создал вид прокрутки на основе ограничений. Большая часть представления настроена в xib (SlideViewController. И подкласс SlideView UIView, который будет добавлен к представлению прокрутки). SlideViewController содержит UIScrollView и UIView в качестве представления содержимого, которое связано с представлением прокрутки с ограничениями. В xib это простая настройка. Проблема появляется, когда я пытаюсь добавить несколько SlideView для просмотра содержимого. Конечно, я хочу добавить это с ограничениями. Прежде всего, выдает предупреждение Unable to simultaneously satisfy constraints. с подробностями:

"<NSLayoutConstraint:0x600001806b70 H:|-(0)-[UIView:0x7ffac0d0cb40]   (active, names: '|':UIScrollView:0x7ffac1842600 )>",
    "<NSLayoutConstraint:0x600001806d00 UIView:0x7ffac0d0cb40.centerX == UIScrollView:0x7ffac1842600.centerX   (active)>",
    "<NSLayoutConstraint:0x600001805400 UIScrollView:0x7ffac1842600.trailing == UILayoutGuide:0x6000002308c0'UIViewSafeAreaLayoutGuide'.trailing   (active)>",
    "<NSLayoutConstraint:0x6000018058b0 UIScrollView:0x7ffac1842600.leading == UILayoutGuide:0x6000002308c0'UIViewSafeAreaLayoutGuide'.leading   (active)>",
    "<NSLayoutConstraint:0x6000018065d0 H:|-(0)-[PagingScrollView.SlideView:0x7ffac380be10](LTR)   (active, names: '|':UIView:0x7ffac0d0cb40 )>",
    "<NSLayoutConstraint:0x600001806670 PagingScrollView.SlideView:0x7ffac380be10.width == UIScrollView:0x7ffac1842600.width   (active)>",
    "<NSLayoutConstraint:0x600001806760 H:[PagingScrollView.SlideView:0x7ffac380be10]-(0)-[PagingScrollView.SlideView:0x7ffac3814d10](LTR)   (active)>",
    "<NSLayoutConstraint:0x600001806ad0 PagingScrollView.SlideView:0x7ffac3814d10.width == UIScrollView:0x7ffac1842600.width   (active)>",
    "<NSLayoutConstraint:0x600001806d50 H:[PagingScrollView.SlideView:0x7ffac3814d10]-(0)-[PagingScrollView.SlideView:0x7ffac3805d20](LTR)   (active)>",
    "<NSLayoutConstraint:0x600001806e90 PagingScrollView.SlideView:0x7ffac3805d20.width == UIScrollView:0x7ffac1842600.width   (active)>",
    "<NSLayoutConstraint:0x6000018070c0 H:[PagingScrollView.SlideView:0x7ffac3805d20]-(0)-[PagingScrollView.SlideView:0x7ffac3801b10](LTR)   (active)>",
    "<NSLayoutConstraint:0x600001807200 PagingScrollView.SlideView:0x7ffac3801b10.width == UIScrollView:0x7ffac1842600.width   (active)>",
    "<NSLayoutConstraint:0x6000018072f0 PagingScrollView.SlideView:0x7ffac3801b10.right == UIView:0x7ffac0d0cb40.right   (active)>",
    "<NSLayoutConstraint:0x600001818ff0 'UIView-Encapsulated-Layout-Width' UIView:0x7ffac0d0fba0.width == 414   (active)>",
    "<NSLayoutConstraint:0x600001804460 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x6000002308c0'UIViewSafeAreaLayoutGuide'](LTR)   (active, names: '|':UIView:0x7ffac0d0fba0 )>",
    "<NSLayoutConstraint:0x600001805130 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x6000002308c0'UIViewSafeAreaLayoutGuide']-(0)-|(LTR)   (active, names: '|':UIView:0x7ffac0d0fba0 )>"

И вообще не прокручивается. Показан только последний слайд. Похоже, что contentView не изменяется в зависимости от ограничений.

Следующий код отвечает за добавление каждого из SlideView в ScrollView (именно в представление содержимого):

private func setup() {
        var prevLeftAnchor = contentView.leftAnchor;

        for i in 0 ..< slides.count {
            slides[i].translatesAutoresizingMaskIntoConstraints = false
            contentView.addSubview(slides[i])

            slides[i].leftAnchor.constraint(equalTo: prevLeftAnchor).isActive = true
            slides[i].topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true
            slides[i].widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
            slides[i].heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true
            prevLeftAnchor = slides[i].rightAnchor;
        }

        slides.last?.rightAnchor.constraint(equalTo: contentView.rightAnchor).isActive = true;
}

Через пару часов я застрял и не вижу, в чем проблемаявляется. Я ценю любой ответ.

Вы можете взглянуть на простой проект в github https://github.com/sumofighter666/PageScroller

1 Ответ

1 голос
/ 12 октября 2019

В вашем SlideViewController.xib у вас есть ограничение CenterX на Content View ...

Удалите это ограничение, и вы сможете прокрутить.

Обратите внимание, что вытакже есть ограничения два Leading. Поскольку они идентичны, это ни на что не влияет, но может также удалить один из них для ясности.

...