使用自定义UITableViewCell进行自动布局

时间:2012-10-21 14:20:32

标签: objective-c cocoa-touch ios6 autolayout

如何使用自动布局来移动和调整自定义UITableViewCell的内容?

为了使问题更加清晰,我已将自定义单元格的contentView指定为浅灰色背景颜色。为了将此问题减少到可能的最小问题,我的自定义单元格只有一个UIImageView名为ratingImageView,显示了一些黄色星星;在下图中可以看到三个这样的细胞。

Table view with custom cells and auto layout

我的ratingImageView只有4个限制条件; (1)width = 81,(2)height = 40,(3)将中心Y与superview对齐,以及(4)superview的尾随空间= 20。我希望尾随空间为superview约束,以便在滑动删除时出现标准删除按钮时强制图像视图向左移动。但是,它没有如下图所示。

Custom cell content not moving with auto layout

我尝试了许多不同的约束组合,无法按照我的预期进行ratingImageView转换。

我通过良好的introductory Storyboard tutorial解决了这个问题。我使用好的旧支柱和弹簧来完成这项工作没有任何问题,但我决定尝试使用自动布局并没有运气。

2 个答案:

答案 0 :(得分:12)

当我为tutorial启用Autolayout ON时,我遇到了同样的问题。

问题在于约束Horizontal Space (20)。默认情况下,此约束的优先级设置为1000,这意味着高优先级。因此,当显示delete按钮时,imageView遵守约束并使其自身保持在其位置而不重新定位对应于UITableViewCell(在本例中为PlayerCell)的内容视图。

在与我的同事的合作中,我们找到了解决此问题的方法。以编程方式将约束添加到ratingImageView解决了这个问题。如果有人有比此更好的解决方案,请在此处发布。

  1. 打开故事板并选择PlayerCell并扩展其约束条件。
  2. 选择约束“Horizontal Space (20)”,然后在“属性”检查器中将其优先级设置为任何较低的值。
  3. 在PlayersViewController.m文件中,在cellForRowAtIndexPath tableView的委托方法中添加以下代码:

    UIImageView *ratingImageView = cell.ratingImageView;
    NSDictionary *dict = NSDictionaryOfVariableBindings(ratingImageView); [cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[ratingImageView]|" options:0 metrics:nil views:dict]];

答案 1 :(得分:0)

在我的情况下,我已经删除了正确的约束,然后我再次添加它,但这次没有选中“约束到边距”复选框。此复选框默认选中。