Быстро стучал в это на пару дней сейчас. Проблема в том, что когда я использую ограничения автоопределения и выравниваю представление на правом краю UITableViewCell, представление исчезает. Ниже приведен код, который воспроизводит проблему, но я пробовал много других вещей, таких как различные «needsLayout», «needsUpdateContraints» и т. Д. В разных местах, а также их соответствующие «updateLayoutIfNeeded» звонки повсюду. Я также попытался переопределить «updateConstraints» и добавить туда ограничения. Но я получаю точно такие же результаты независимо от того, что я делаю.Пользовательский вид UITableViewCell исчезает автоклассически вправо
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 2;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString* [email protected]"Simple";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:SimpleIdentifier];
tableView.translatesAutoresizingMaskIntoConstraints=NO;
UILabel* label1;
UILabel* label2;
if(cell==nil){
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleIdentifier];
label1=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
label1.tag=100;
label1.translatesAutoresizingMaskIntoConstraints=NO;
[cell.contentView addSubview:label1];
label2=[[UILabel alloc]initWithFrame:CGRectMake(100, 0, 100, 50)];
label2.tag=101;
label2.translatesAutoresizingMaskIntoConstraints=NO;
[cell.contentView addSubview:label2];
NSDictionary* [email protected]{@"label1":label1,@"label2":label2};
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[label1]" options:NSLayoutFormatAlignAllTop metrics:nil views:viewsDictionary]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label2]|" options:NSLayoutFormatAlignAllTop metrics:nil views:viewsDictionary]];
//[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[label1]-[label2]" options:NSLayoutFormatAlignAllTop metrics:nil views:viewsDictionary]];
} else {
label1=(UILabel*)[cell.contentView viewWithTag:100];
label1=(UILabel*)[cell.contentView viewWithTag:101];
}
[email protected]"Label 1";
[email protected]"Label 2";
return cell;
}
вопросы Автокомпоновка хитры. Я вижу, что кто-то отправил ответ, но, в общем, вам нужно использовать отладчик вида для просмотра ограничений во время выполнения. Это покажет вам, что вы делаете неправильно, и это лучший подход, чем случайный код в разных методах. В WWDC 2015 были также два видео (# 218 и # 219 Mysteries of AutoLayout Part 1 и 2), которые позволяют вам отлаживать проблемы автозапуска. Их можно скачать бесплатно с Apple: https://developer.apple.com/videos/wwdc/2015/ –
Спасибо, это оказалось чем-то глупо простым (см. Комментарий ниже). Я просмотрю эти видео. –