У меня есть суперпредставление с тремя подпредставлениями. Два из этих подпредставлений имеют фиксированный размер и положение в суперпредставлении, но третье может различаться по размеру в зависимости от его содержимого.
Я установил автоматические ограничения макета, чтобы установить размер и положение каждого из вложенных видов, но я хотел бы, чтобы при изменении содержимого третьего представления размер суперпредставления изменялся, чтобы иметь возможность отображать это полностью.
Я реализовал - (NSSize) intrinsicContentSize для этого подпредставления, чтобы он возвращал размер, который он хотел бы иметь, но я не могу понять, как добавить ограничение, которое заставит суперпредставление изменить размер.
Есть идеи?
UPDATE:
Я получил эту работу, добавив ограничения к представлению следующим образом:
sizeWidthConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"H:[self(==viewWidth)]" options:0 metrics:metrics views:views] lastObject];
sizeHeightConstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:[self(==viewHeight)]" options:0 metrics:metrics views:views] lastObject];
где «viewWidth» и «viewHeight» - ключи в словаре метрик с требуемыми значениями. Затем в udpateConstraints я могу проанализировать содержимое моего представления и сделать следующее:
[sizeHeightConstraint setConstant: size.height];
[sizeWidthConstraint setConstant: size.width];
для установки новых значений, а следующий макет приведет к изменению размера представления.
ОБНОВЛЕНИЕ в ответ на вопрос панупана:
Когда вы создаете ограничение таким образом, вы можете вставить то, что по сути является именем переменной. В данном случае это имена viewWidth и viewHeight . Они известны как константы ограничения. Вы также передаете словарь, называемый метриками, вызову [NSLayoutConstrating constraintsWithVisualFormat: ...], который дает значения для этих констант.
Итак, в этом случае я начинаю с высоты и ширины по умолчанию для моего представления в качестве значений для словаря метрик viewWidth и viewHeight . Позже я использую метод setConstant: для изменения этих значений. В приведенном выше примере size - это структура CGSize, которую я вычислил из содержимого представления (т.е. на основе размеров его подпредставлений), и я использую значения ширины и высоты для настройки констант.
Это не совсем то, что я делал после того, как оно не приводит к автоматическому изменению размера моего вида в зависимости от внутренних размеров подпредставлений, но дает мне возможность заново размер вручную.