2013-10-08 3 views
0

Я пытаюсь выяснить, как использовать Autolayout, и я создал проблему. Я хочу создать представление в IB размером 200x200. Этот вид, называемый PieView, имеет два UIImageView с кадрами (0, 0, 200, 200) для обоих из них. Мой вопрос в том, как переопределить updateConstraints в коде (мне нравится язык визуального формата) или в IB, что если я изменю размер моего PieView (например, до 100), а subviews тоже изменится (0, 0, 100, 100).Ошибка автозапуска с изменением размера подсмотров

И как я могу изменить размер PieView, я стараюсь по ширине и по высоте

NSLayoutConstraint *width = [NSLayoutConstraint constraintWithItem:self 
                 attribute:NSLayoutAttributeWidth 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:nil 
                 attribute:NSLayoutAttributeNotAnAttribute 
                 multiplier:1.0f 
                  constant:100.f];//kDiameter * sizeCoef]; 
+0

200x200 PieView имеет два изображения с кадрами (0,0, 200, 200)? Таким образом, представления изображений сложены друг на друга? – bilobatum

ответ

1

Если подвиды по мнению контейнера (PieView) правильно установлены/размера/возлагали относительно их контейнер, все, что вам нужно сделать, это обновить ширину представления контейнера (PieView).

Чтобы изменить размер представления в коде, вам необходимо убедиться, что вы сохраняете ссылку (в свойстве, например) на ограничение на ширину представления. Поэтому, если вы добавили это ограничение в Xcode, это означает подключение розетки для этого ограничения. Или, если вы добавили его в код (как вы писали в своем вопросе), просто назначьте ограничение для свойства вместо локальной переменной.

Затем, в updateConstraints, измените свойство ограничения на новую ширину constant. Вот пример:

- (void)updateConstraints 
{ 
    // Probably want to wrap the below line with a check for when you should actually do this change, 
    // as updateConstraints may get called more than once (including when you aren't ready to change the width). 
    self.widthConstraint.constant = 100.0f; 
} 

Тогда просто позвоните setNeedsUpdateConstraints на виду, когда вы будете готовы изменить свою ширину!

0

Я не уверен, что вам даже нужно перенастроить ограничения высоты или ширины для изображений. Если вы хотите, чтобы изображения просматривались и уменьшались с помощью своего супервизора, просто прикрепите стороны просмотров изображений к супервину в IB. Вам не нужно переопределять updateConstraints.

Смежные вопросы