2013-08-05 2 views
2

У меня есть UIView («супервизор»), который имеет пару UILabels в качестве подзонов, настроенных в Interface Builder. У меня включена автоматическая компоновка для правильного размещения всех ярлыков в списке один за другим. Это хорошо работает.Как мне изменить размер супервизора в соответствии с размером его подзонов с помощью Autolayout?

То, что я пытаюсь сделать, это сделать так, чтобы мой Superview изменялся по вертикали, чтобы соответствовать высоте всех моих ярлыков, и я не могу понять, как это сделать.

Как это работает?

ответ

-2

Попробуйте использовать метод UIView sizeToFit?

+0

Это работает, когда включена автоматическая компоновка? – jbrennan

+0

Не знаю, но я так полагаю. Попробуйте и дайте нам знать :) –

+0

Он ничего не делает. – jbrennan

1

Вот пример использования визуальных макетов ... так что игнорируйте бизнес translatesAutoresizingMaskIntoConstraints.

Это зависит от того, что вид контейнера НЕ имеет ограничений по высоте, и, похоже, он полагается на расстояние между видами. Система изменит размер представления, чтобы он соответствовал требованиям подсмотров.

- (instancetype)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.backgroundColor = [UIColor redColor]; 

     [self setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     _labelOne = [[UILabel alloc] init]; 
     _labelOne.text = @"Banana"; 
     _labelOne.backgroundColor = [UIColor blueColor]; 
     [_labelOne setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     _labelTwo = [[UILabel alloc] init]; 
     _labelTwo.text = @"Dinosaur"; 
     _labelTwo.backgroundColor = [UIColor yellowColor]; 
     [_labelTwo setTranslatesAutoresizingMaskIntoConstraints:NO]; 

     [self addSubview:_labelOne]; 
     [self addSubview:_labelTwo]; 

     NSDictionary *views = NSDictionaryOfVariableBindings(_labelOne, _labelTwo); 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelOne]|" options:0 metrics:nil views:views]]; 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelTwo]|" options:0 metrics:nil views:views]]; 
     [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_labelOne(30)]-15-[_labelTwo(30)]-10-|" options:0 metrics:nil views:views]]; 
    } 
    return self; 
} 
+0

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

+0

Вы можете изменить фиксированные «30» высоты, которые я выбрал там, в качестве примера для> = 30, что, по крайней мере, позволило бы расширить виды. Не уверенно, на 100%, как запускать sizeToFit раньше времени. – Malaxeur

0

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

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