Понимание высоты UIView, когда ограничения установлены с AutoLayout / UIScrollView - PullRequest
0 голосов
/ 25 мая 2019

Надеюсь, это this graphic поможет, но я пытаюсь обернуть голову вокруг концепции. У меня есть UIScrollView, добавленный к self.view в моем ViewController, с верхним, ведущим, задним и нижним краями, прикрепленными к таковому self.view. Это viewA.

У меня есть второй UIView, viewB, с несколькими подпредставлениями. Каждое из этих подпредставлений добавляется в viewB с помощью AutoLayout, и для краткости каждому из этих подпредставлений присваивается ограничение высоты, установленное в значение.

Я хочу добавить viewB к viewA, чтобы viewA мог прокручивать по вертикали. Поскольку viewB несомненно выше, чем viewA, он должен прокручиваться.

Я добавляю viewB вот так;

viewB.topAnchor.constraint(equalTo: viewA.topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: viewA.leadingAnchor).isActive = true
viewB.trailingAnchor.cosntraint(equalTo: viewA.trailingAnchor).isActive = true

Вот где я застрял. Если я установлю нижнюю привязку (viewB.bottomAnchor.constraint(equalTo: viewA.bottomAnchor).isActive = true), мой UIScrollView не прокручивается, и viewB заметно обрезается.

Если я установлю случайную высоту для viewB (используя viewB.heightAnchor.constraint(equalToConstant: 2000.0).isActive = true), UIScrollView выполняет прокрутку, хотя эта константа слишком велика.

Я запутался, как получить соответствующую высоту для viewB. Поскольку viewB имеет фактическую высоту (с жестко закодированными подпредставлениями), я не вижу причины, по которой AutoLayout не сможет рассчитать эту высоту viewB, даже если не задана нижняя привязка, но не может выяснить правильный код.

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Если ограничение по высоте выполнено, вам не нужно учитывать contentSize viewA. Вам не нужно использовать ViewB, добавить подпредставления к viewA, верхний равный subview1 к верхнему виду viewA, установить высоту subview1, нижний равный subview1 верху subview2 или сместить некоторую высоту. И так далее. До последнего подпредставления нижний конец subview4 равен низу viewA '. Вы можете получить подходящий размер контента без установки высоты контента.

1 голос
/ 25 мая 2019

1 - Вам необходимо подключить viewB, ведущий, задний, верхний и нижний, к viewA, плюс ширина viewB установлена ​​= ширина основного вида VC

2 - все ограничения внутри viewB должны быть правильно подключены сверхувниз

3 - вместо многократного использования .isActive = true рассмотрите возможность обернуть все ограничения внутри NSLayoutConstraint.activate([<#ConstraintsHere#>])

4 - Может быть, для вашего текущего подхода UITableView более подходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...