使用动态高度时,故事板与UITableViewCell的冲突约束

时间:2015-01-24 13:48:32

标签: ios uitableview ios8 autolayout tableviewcell

我的故事板有奇怪的问题。我正在重构我的应用程序代码,以利用行高的自动维度而不是UITableViewDelegate方法。我的细胞非常简单 - 它只有一个孩子,这是UIView。我添加了约束:

enter image description here

我有约束冲突: enter image description here

但是在模拟器上一切都运行良好,我在控制台中没有任何约束警告。

你告诉我什么错了吗?也许我没有得到细胞动态大小的想法,但在我看来,我应该设置确定细胞高度的约束而没有歧义(我的三个约束正在这样做)。

1 个答案:

答案 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

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