ios – 自动调整大小UITableViewCell:无法同时满足约束
发布时间:2020-12-14 17:48:03 所属栏目:百科 来源:网络整理
导读:我正在尝试实现一个UITableViewCell,它自动调整其高度以适应可用内容.我现在有以下布局,但每当我运行程序时,调试器会抛出各种“无法同时满足约束”错误.我设置约束的方式有问题吗? [LayoutConstraints] Unable to simultaneously satisfy constraints. Prob
我正在尝试实现一个UITableViewCell,它自动调整其高度以适应可用内容.我现在有以下布局,但每当我运行程序时,调试器会抛出各种“无法同时满足约束”错误.我设置约束的方式有问题吗?
[LayoutConstraints] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. ( "<NSLayoutConstraint:0x60800009c2f0 UIImageView:0x7fd389002f50.height == 60 (active)>","<NSLayoutConstraint:0x60800009a8b0 UIImageView:0x7fd389002f50.top == UITableViewCellContentView:0x7fd389009b20.topMargin + 4 (active)>","<NSLayoutConstraint:0x608000097ca0 UITableViewCellContentView:0x7fd389009b20.bottomMargin >= UIImageView:0x7fd389002f50.bottom + 4 (active)>","<NSLayoutConstraint:0x600000097d40 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fd389009b20.height == 80 (active)>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x60800009c2f0 UIImageView:0x7fd389002f50.height == 60 (active)> 为了完整起见,这是我用于测试的简单代码. “ListViewController.m” - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view,typically from a nib. tableView.rowHeight = UITableViewAutomaticDimension; tableView.estimatedRowHeight = 40; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 40; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ListTableViewCell *cell = (ListTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"ListCell" forIndexPath:indexPath]; [self configureCell:cell atIndexPath:indexPath]; return cell; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. return NO; } - (void)configureCell:(ListTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.hasProfile = (arc4random_uniform(10) < 3); cell.hasSecondField = (arc4random_uniform(10) < 3); } ListViewCell.h @interface ListTableViewCell : UITableViewCell { IBOutlet NSLayoutConstraint *pictureWidthConstraint; IBOutlet NSLayoutConstraint *pictureHeightConstraint; IBOutlet NSLayoutConstraint *pictureBottomTrailingConstraint; IBOutlet NSLayoutConstraint *subheaderHeightConstant; IBOutlet UILabel *subheaderLabel; } @property (nonatomic,assign) BOOL hasProfile; @property (nonatomic,assign) BOOL hasSecondField; @end ListViewCell.m - (void)setHasProfile:(BOOL)hasProfile { _hasProfile = hasProfile; if (!hasProfile) { pictureHeightConstraint.constant = 0; pictureWidthConstraint.constant = 0; } else { pictureHeightConstraint.constant = 60; pictureWidthConstraint.constant = 60; } } - (void)setHasSecondField:(BOOL)hasSecondField { _hasSecondField = hasSecondField; if (!hasSecondField) { subheaderLabel.text = @""; subheaderHeightConstant.constant = 0; } else { subheaderLabel.text = @"Second Label"; subheaderHeightConstant.constant = 21; } } 解决方法
该错误表示存在一些与您的imageview的高度60冲突的其他约束,并且此约束被修改以便可以满足所有约束.
您可以调整以查看哪个约束与该高度冲突,或者您可以自己解决它.为此,请单击图像高度上的编辑按钮,然后将优先级更改为999 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |