Scrollview работает, нарушая ограничение - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть UIViewController, содержащий scrollView : scrollView прикреплен (0,0,0,0) к superview.

scrollView содержит представление содержимого со следующими установленными ограничениями:

enter image description here

Внутри этого представления япоставить квадрат изображение : оно закреплено таким образом, а его высота равна ширине суперпредставления .

enter image description here

Все, что я описал до сих пор, выполняется вручную в раскадровке .

Затем с помощью простой кнопки (например, после viewDidLoad, viewDidLayoutSubviews и т. Д.),Я выполняю следующую функцию (что 375 в настоящее время жестко запрограммировано, но это heigth вида изображения frame на устройстве, которое я использую для тестирования):

var startH = 0

for i in 0...10 {

let v = UIView(frame: CGRect(x: 0, y: 375+startH, width: 375, height: startH))
    v.backgroundColor = .random
    contentView.addSubview(v)
    startH += 100
}

let scrollerLayoutGuide = scrollView.contentLayoutGuide
scrollerLayoutGuide.heightAnchor.constraint(equalToConstant: CGFloat(startH+375)).isActive = true
scrollView.contentSize = contentView.frame.size

Это должно (и действительно так) создать 11 представлений в imageView внутри contentView scrollView .

Проблема в том, когда я исполняюПри использовании этой функции я получаю следующую ошибку:

[LayoutConstraints] Unable to simultaneously satisfy constraints.   
Probably at least one of the constraints in the following list is one you don't want.   
Try this:       (1) look at each constraint and try to figure out which you don't expect;       (2) find the code that added the unwanted constraint or constraints and fix it.  (
    "<NSLayoutConstraint:0x6000019d7d40 UIView:0x7fe66940aa30.height == UIScrollView:0x7fe66985b400.height   (active)>",
    "<NSLayoutConstraint:0x6000019d7d90 V:|-(0)-[UIView:0x7fe66940aa30]   (active, names: '|':UIScrollView:0x7fe66985b400 )>",
    "<NSLayoutConstraint:0x6000019d7de0 V:[UIView:0x7fe66940aa30]-(0)-|   (active, names: '|':UIScrollView:0x7fe66985b400 )>",
    "<NSLayoutConstraint:0x6000019e4690 UILayoutGuide:0x6000003c81c0'UIViewSafeAreaLayoutGuide'.bottom == UIScrollView:0x7fe66985b400.bottom   (active)>",
    "<NSLayoutConstraint:0x6000019e4730 UIScrollView:0x7fe66985b400.top == UILayoutGuide:0x6000003c81c0'UIViewSafeAreaLayoutGuide'.top   (active)>",
    "<NSLayoutConstraint:0x6000019e11d0 _UIScrollViewLayoutGuide:0x6000003ac1c0'UIScrollView-contentLayoutGuide'.height
== 1475   (active)>",
    "<NSLayoutConstraint:0x6000019e9540 'UIView-Encapsulated-Layout-Height' UIView:0x7fe66950bdb0.height == 667   (active)>",
    "<NSLayoutConstraint:0x6000019e45f0 'UIViewSafeAreaLayoutGuide-bottom' V:[UILayoutGuide:0x6000003c81c0'UIViewSafeAreaLayoutGuide']-(0)-|   (active, names: '|':UIView:0x7fe66950bdb0 )>",
    "<NSLayoutConstraint:0x6000019e4550 'UIViewSafeAreaLayoutGuide-top' V:|-(20)-[UILayoutGuide:0x6000003c81c0'UIViewSafeAreaLayoutGuide']   (active, names: '|':UIView:0x7fe66950bdb0 )>" )

Will attempt to recover by breaking constraint  <NSLayoutConstraint:0x6000019d7de0 V:[UIView:0x7fe66940aa30]-(0)-|   (active, names: '|':UIScrollView:0x7fe66985b400 )>

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

1 Ответ

0 голосов
/ 21 февраля 2019

Существует конфликт между вашими ограничениями с помощью contentView

1. There is Top, bottom, leading, trailing with the scrollview 2. Fixed height and fixed width constraint of contentView

Эти два будут конфликтовать друг с другом, так как ОС не будет уверена, какое ограничение выполнить.В качестве решения уменьшите приоритет высоты и ширины constraint, чтобы больший приоритет был отдан constraint по отношению к scrollView.

. Для получения более подробной информации, пожалуйста, следуйте приведенному ниже руководству Какнастроить UIScrollView с автоматической компоновкой

...