使用动态高度时 UITableViewCell 的情节提要冲突约束

Storyboard conflicting constraints for UITableViewCell while using dynamic height

故事板有一个奇怪的问题。我正在重构我的应用程序代码以利用行高的自动尺寸而不是 UITableViewDelegate 方法。我的单元格非常简单——它只有一个子单元,即 UIView。我添加了约束:

和我有约束冲突:

但在模拟器上一切正常,我在控制台中没有任何约束警告。

你能告诉我有什么问题吗?也许我不明白单元格动态调整大小的想法,但在我看来,我应该设置约束来确定单元格高度而不会产生歧义(我的三个约束正在这样做)。

单元格中的视图 view.bottom 最近邻为 12,即 superview.Bottom.Margin(或单元格的内容视图)。您要求 view.bottom 具有 8 的约束。此外,为了满足这些约束,界面构建器需要更改视图的高度(示例中的蓝色)。这当然是做不到的,因为有一个约束将视图的高度限制为 50。

为了解决这个问题,使数字相加,将 table 视图单元格的高度更改为 80 而不是默认的 84。但是如果您打算更改 table 单元格的高度动态地你可能会遇到更多的约束问题。

或者将约束 "Vertical Space-(8)-Content View-View" 更改为常量 12。因此它将是 "Vertical Space-(12)-Content View-View"。同样,如果您动态更改 table 单元格的高度,您将遇到问题。

您打算将视图置于 table 单元格的中心吗?如果是这样,则删除两个垂直约束并添加中心 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

我会 post 界面生成器设置的图像以及它在模拟器中的外观,但我没有足够的声誉。