Здесь представления, сгенерированные программно, добавляются к родительскому представлению. Когда представление создано, к нему должны быть добавлены его ограничения.
Но ограничения должны быть сопоставлены с предыдущим представлением, поэтому нам нужно идентифицировать предыдущее представление (последнее представление в родительском представлении).
NSArray *subViewList = [_vwParentView subviews];
UIView *lastView;
if (subViewList.count > 0) {
lastView = [subViewList lastObject];
}
Приведенный выше код поможет найти последнее созданное представление. Когда представления создаются программно и добавляются как вложенные представления, представления будут добавлены как стек для parrentView, и, следовательно, представление, созданное последним, будет последним объектом в массиве subViewList.
Примечание. Предположим, что отдельное представление назначено в качестве родительского представления без дочерних представлений.
UIView *contentView = [[UIView alloc]init];
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:1.0 constant:initialWidth];
[contentView addConstraint:widthConstraint];
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:initialHeight];
[contentView addConstraint:heightConstraint];
contentView.translatesAutoresizingMaskIntoConstraints = NO;
[_vwParentView addSubview:contentView];
NSLayoutConstraint *gapMaintainTopConstraint;
if (lastView == nil) {
gapMaintainTopConstraint = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_vwParentView attribute:NSLayoutAttributeTop multiplier:1.0 constant:15];
}
else
{
gapMaintainTopConstraint = [NSLayoutConstraint constraintWithItem:contentView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:lastView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:15];
}
[_vwParentView addConstraint:gapMaintainTopConstraint];
В случае изменения размера добавленного представления в будущем, это должно быть достигнуто путем изменения его widthConstraint или heightConstraint, только тогда будет работать связанное с ним ограничение (для сохранения определенного зазора). После этого размер не следует изменять с помощью фреймов. Значение - представления на основе ограничений должны обрабатываться только с использованием ограничений.
Можно создать ограничение «расстояние до ближайшего соседа» только после того, как созданный вид будет добавлен в качестве подвида.
Свойство translatesAutoresizingMaskIntoConstraints созданного представления должно быть отключено, чтобы не возникало конфликта ограничений при изменении размера (созданного представления) в будущем.
person
Mithun Ravindran
schedule
13.11.2014