У меня есть subclassed UIView, чтобы сделать пользовательский groupView, который я использую, чтобы добавить несколько вещей в мой макет простым способом. Этот groupView включает UILabel, который используется как заголовок и UIView, который рисует roundRect на нем CALayer с цветом фона. Подумайте о разделах UITableView. Я добавляю этот groupView в раскадровку, отбрасывая UIView и меняя его класс на мой подкласс. Все работает хорошо, я задал заголовок через пользовательские атрибуты времени выполнения в Xcode. Все отлично работает, я добавляю UILabels к этому представлению на раскадровке, и он создает ярлык заголовка и округляет его, когда он запускается.
структура моего groupView:
- groupView: (UIView) clipToBounds: НЕТ;
- заголовок: (UILabel) позиционируется над groupView.
- contentView: (UIView) создает roundRect и цвет через CALayer, должен иметь тот же размер, что и groupView.
Так в чем проблема? Ну, работа с autolayout - это боль, но для этого подкласса UIView мне нужно установить программные ограничения contentView. Я не могу понять синтаксис этой строки формата ASCII автоматического макета. В настоящее время у меня есть:
_contentView = [[UIView alloc]initWithFrame:self.bounds];
_contentView.layer.cornerRadius = 5.0f;
_contentView.layer.masksToBounds=YES;
_contentView.backgroundColor=_backgroundColor;
_contentView.layer.borderWidth=_borderWidth;
_contentView.layer.borderColor=_borderColor.CGColor;
[self insertSubview:_contentView atIndex:0];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self,_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[self]-0-[_contentView]-0-[self]" options:0 metrics:nil views:viewsDictionary];
for (NSLayoutConstraint *constraint in constraints) {
[_contentView addConstraint:constraint];
}
Сбой: * Завершение приложения из-за неотображенного исключения "NSGenericException", причина: "Невозможно установить ограничение на просмотр. Сдерживает ли ссылка что-то извне поддерева представления? Это незаконно. constraint: view: > '
Я пробовал это первым, и он все еще не работал:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[_contentView]-0-|" options:0 metrics:nil views:viewsDictionary];
Сбой: * Завершение приложения из-за неотображенного исключения "NSGenericException", причина: "Невозможно установить ограничение на просмотр. Сдерживает ли ссылка что-то извне поддерева представления? Это незаконно. constraint: view: > '
RANT: Как-то этот AutoLayout должен сэкономить нам работу, но Я не вижу, как выгоды из веса накладные сейчас. Зачем на земле они перешли от использования ссылок и методов или даже типа defs для этой строки архаичного формата? Насколько это было бы проще: [_contentView constraint: NSLayoutFormatAlignLeading toView: self withDistance: 0.0f]; Или что-то подобное? Я бы очень хотел с пружинами и стойками в этот момент.
Любая помощь в понимании или показ мне синтаксиса для ограничения содержимогоView до размера self будет полезен.