OStack程序员社区-中国程序员成长平台

标题: ios - UITableViewCell 被选中后更改 subview 位置 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 03:44
标题: ios - UITableViewCell 被选中后更改 subview 位置

我使用 AutoLayout 创建了一个动态单元格,将代码放入 (void)updateConstraints 单元格的 subview 方法中,设置 BOOL 值以便自定义 AutoLayout 代码只运行一次,并在 View Controller 调用中

  [cell setNeedsUpdateConstraints];
  [cell updateConstraintsIfNeeded];

就在返回单元格之前。一切似乎都很好,但我遇到了奇怪的问题,当我选择单元格时,它的所有 subview (或它本身?)改变位置。

table view

这个漂亮箭头指向的单元格显示了它;]



Best Answer-推荐答案


我遇到了同样的错误并花了大约一天的时间来修复这个问题……为了解决问题,我在单元格和内容 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4