我的故事板有奇怪的问题。我正在重构我的应用程序代码,以利用行高的自动维度而不是UITableViewDelegate方法。我的细胞非常简单 - 它只有一个孩子,这是UIView。我添加了约束:
我有约束冲突:
但是在模拟器上一切都运行良好,我在控制台中没有任何约束警告。
你告诉我什么错了吗?也许我没有得到细胞动态大小的想法,但在我看来,我应该设置确定细胞高度的约束而没有歧义(我的三个约束正在这样做)。答案 0 :(得分:3)
对于单元格中的视图,view.bottom的最近邻居为12,即superview.Bottom.Margin(或单元格的内容视图)。您要求view.bottom的约束为8.此外,为了满足这些约束,“接口”构建器需要更改视图的高度(示例中为蓝色)。这当然无法完成,因为有一个约束将视图的高度限制为50。
要解决此问题,所以数字加起来会将表格视图单元格的高度更改为80而不是默认值84.但如果您打算动态更改表格单元格的高度,则可能会遇到更多约束问题。 / p>
或更改约束"垂直空间 - (8) - 内容查看 - 查看"常数为12.因此它将是"垂直空间 - (12) - 内容视图 - 视图"。再次,如果您动态更改表格单元格的高度,您将遇到问题。
您是否打算将视图置于表格单元格的中心?如果是这种情况,则删除两个垂直约束并添加中心y对齐约束。然后,当您更改单元格的高度时,视图将通过计算顶部和底部约束应该是什么来垂直居中。
以下是我创建的示例项目:
#import "testLayoutControllerTableViewController.h"
@interface testLayoutControllerTableViewController ()
@property (weak, nonatomic) IBOutlet UITableView *thetable;
@end
@implementation testLayoutControllerTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellid"];
return cell;
}
@end
我会发布界面构建器设置的图像以及它在模拟器中的外观,但我没有足够的声誉。