Я должен добавить некоторые ограничения программным образом в настраиваемом UITableViewCell, у меня есть mainView (красный), он будет контейнером (subView of cell.contentView), изображением и двумя другими областями mainView.Autolayout программно не работает
это то, что я хочу иметь (синие и желтые точки зрения не имеют одинаковую высоту, но это другой вопрос):
с помощью кода, приведенную ниже (я не добавив ImageView еще), у меня есть это:
, как вы можете увидеть 2 подвиды имеют одинаковый размер, и когда я прокрутки, иногда отображается синий вид и иногда это желтый один.
код:
self.mainView = [[UIView alloc]init];
[self.mainView setBackgroundColor:[UIColor redColor]];
[self.mainView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:self.mainView];
UIView *blueView = [[UIView alloc]init];
[blueView setTranslatesAutoresizingMaskIntoConstraints:NO];
[blueView setBackgroundColor:[UIColor blueColor]];
[self.mainView addSubview:blueView];
UIView *yelloView = [[UIView alloc]init];
[yelloView setBackgroundColor:[UIColor yellowColor]];
[yelloView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.mainView addSubview:yelloView];
NSDictionary *views = NSDictionaryOfVariableBindings(blueView,yelloView,mainView);
NSMutableArray *results = [NSMutableArray array];
NSString *mainContentView_CVF_H = @"H:|-[blueView]-|";
NSString *mainContentView_CVF_V = @"V:|-[blueView]";
NSArray *mainContentViewConstaints_H = [NSLayoutConstraint constraintsWithVisualFormat:mainContentView_CVF_H options:0 metrics:nil views:views];
NSArray *mainContentViewConstaints_V = [NSLayoutConstraint constraintsWithVisualFormat:mainContentView_CVF_V options:0 metrics:nil views:views];
[results addObjectsFromArray:mainContentViewConstaints_H];
[results addObjectsFromArray:mainContentViewConstaints_V];
NSString *delivelyView_CVF_H = @"H:|-[yelloView]-|";
NSString *delivelyView_CVF_V = @"V:[blueView][yelloView]-|";
NSArray *delivelyViewConstaints_H = [NSLayoutConstraint constraintsWithVisualFormat:delivelyView_CVF_H options:0 metrics:nil views:views];
NSArray *delivelyViewConstaints_V = [NSLayoutConstraint constraintsWithVisualFormat:delivelyView_CVF_V options:0 metrics:nil views:views];
[results addObjectsFromArray:delivelyViewConstaints_H];
[results addObjectsFromArray:delivelyViewConstaints_V];
[self.mainView addConstraints:results];
NSString *mainView_CVF_H = @"H:|-[mainView]-|";
NSString *mainView_CVF_V = @"V:|-[mainView]-|";
results = [NSMutableArray array];
NSArray *mainViewConstaints_H = [NSLayoutConstraint constraintsWithVisualFormat:mainView_CVF_H options:0 metrics:nil views:views];
NSArray *mainViewConstaints_V = [NSLayoutConstraint constraintsWithVisualFormat:mainView_CVF_V options:0 metrics:nil views:views];
[results addObjectsFromArray:mainViewConstaints_H];
[results addObjectsFromArray:mainViewConstaints_V];
[self.contentView addConstraints:results];
я заменить подвидов (синий и желтый) с 2 текстом поданной без каких-либо изменений, и они отображаются, как ожидалось.
2 вопросы:
вы можете помочь :)?
Важное значение имеет порядок добавления ограничений?
Зачем вам нужно добавлять ограничения в код? Есть ли причина, по которой вы не можете сделать это в IB? – rdelmar
Мне нужно использовать код, потому что содержимое ячейки будет очень динамичным. –
Это не обязательно означает, что вы должны делать это в коде (или все в коде в любом случае). Я часто делаю ячейки с текстовыми представлениями, ярлыками и/или изображениями, которые могут иметь переменный размер в зависимости от их содержимого. Сила ограничений заключается в том, что вы можете настроить их в IB таким образом, чтобы они позволяли элементам UI изменять размер, как вы хотите. Если вы еще этого не сделали, вы должны проверить 3 видео на WWDC 2012 по этому вопросу. – rdelmar