Вам нужно будет указать дополнительные ограничения для представления, чтобы заставить его изменить размер представления, чтобы заполнить оставшееся доступное пространство. В настоящее время вы устанавливаете минимумы и максимумы представления, но не устанавливаете никаких конкретных ограничений, чтобы дать автомакету более полное решение. В дополнение к верхней границе ширины вам нужно дать ему 1. отправную точку для определения ширины представления, либо явно задав ширину с более низким приоритетом, либо 2. увеличив расстояние с обеих сторон. жесткие ограничения.
Основываясь на том, что вы описали, вам нужно ограничить свое представление, чтобы дать ему более существенные привязки к суперпредставлению с обеих сторон, чтобы позволить системе решить ширину. Поскольку вы хотели бы, чтобы сам размер представления основывался на размере его контейнера, вам нужно будет изменить ограничения интервалов (вариант 2 сверху). В приведенном выше примере вы указали только минимальное расстояние, что приведет к тому, что любое из следующих решений ограничения будет признано действительным механизмом автомакета для суперпредставления 400pt:
|-32pt-[20pt]-------348pt-| <-- autolayout will probably choose this one
|-100pt----[20pt]---280pt-|
|-50pt--[20pt-]-----330pt-|
Что, вероятно, не то, что вы хотите. Более того, ширина представления может быть любой между 0-576pt, что также, вероятно, не то, что вам нужно. Поскольку автомакет не знает, чего вы хотите, он просто использует intrinsicContentSize
представления для конкретных ограничений по размеру. Поскольку вы выбрали 32 pt в качестве интервала, первым шагом будет дать ограничениям интервалов более существенные инструкции, а именно сообщить системе, что интервал должен составлять 32 pt между краями представления и суперпредставлением. если ширина представления не превышает 576 pts. Вы бы сделали это так в своей строке VFL:
"H:|-(>=32,==32@900)-[viewToAdd(<=576)]-(>=32,==32@900)-|"
В нем говорится: "viewToAdd
должен иметь максимальную ширину 576 pts и иметь отступ между собой и суперпредставлением 32 pts. Если размер суперпредставления превышает максимальную ширину viewToAdd
плюс начальное заполнение 64 pts, заполнение с обеих сторон должно увеличиваться, чтобы продолжать решать набор ограничений».
Это приводит к тому, что следующие ограничения являются правильными для суперпредставления 400pt:
|-32pt--[336pt]--32pt-|
Если вы хотите, чтобы viewToAdd
оставался в центре своего суперпредставления, когда представление превышает максимальное значение, вам нужно будет передать параметр NSLayoutFormatAlignAllCenterX
в параметр options
в [NSLayoutConstraint -constraintsWithVisualFormat:]
. Если вы не установили ограничение >=32
для заполнения или не установили приоритет ниже 1000 ("обязательный" уровень приоритета ограничения) для ограничения ==32
вашего заполнения, тогда ваш супервизор не сможет вырасти за пределы 640pts.
person
larsacus
schedule
30.10.2012