我使用 AutoLayout 创建了一个动态单元格,将代码放入 (void)updateConstraints 单元格的 subview 方法中,设置 BOOL 值以便自定义 AutoLayout 代码只运行一次,并在 View Controller 调用中
[cell setNeedsUpdateConstraints];
[cell updateConstraintsIfNeeded];
就在返回单元格之前。一切似乎都很好,但我遇到了奇怪的问题,当我选择单元格时,它的所有 subview (或它本身?)改变位置。
这个漂亮箭头指向的单元格显示了它;]
Best Answer-推荐答案 strong>
我遇到了同样的错误并花了大约一天的时间来修复这个问题……为了解决问题,我在单元格和内容 View 上设置了不同的背景颜色。在第一次显示表格 View 之后,一切似乎都正常工作,但在选择单元格后,contentView 会跳来跳去 - 有时在选择时,有时在取消选择时(我立即在 tableView:didSelectRowAtIndexPath: 中执行此操作),并且单元格的背景变得可见。所以我认为单元格没有重新建立正确的 contentView 尺寸。
最后结果证明,至少在 iOS 8 中,您需要为单元格以及 contentView 设置适当的 autoresizingMasks,然后通过将 translatesAutoresizingMaskIntoConstraints 设置为 YES 使布局系统将它们转换为约束。同时这个标志需要在你的 contentView 的所有 subview 上为 NO。
这是我对自定义单元格的初始化:
- (void)awakeFromNib {
// enable auto-resizing contentView
[self setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.contentView setTranslatesAutoresizingMaskIntoConstraints:YES];
self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
// remove autoresizing constraints from subviews
for (UIView *view in [self.contentView subviews]) {
view.translatesAutoresizingMaskIntoConstraints = NO;
}
}
对我来说就像一个魅力。作为记录,我正在使用 iOS 8 中引入的 UITableViewCell 自动调整大小,如下所示:
// enable automatic row heights in your UITableViewController subclass
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 80.0; // set to whatever your "average" cell height is
关于ios - UITableViewCell 被选中后更改 subview 位置,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27275447/
|