滚动时,自定义单元格分隔线消失

时间:2014-06-16 20:36:54

标签: ios objective-c uitableview autolayout

我已经通过创建具有灰色背景的视图为我的静态表格视图单元格实现了自定义单元格分隔线,并且我需要应用Autolayout约束,以便在旋转到不同方向时线条将调整大小以填充显示宽度。我已经使用下面的代码完成了这项工作,这是我提出的另一个SO question提供的。这很有效,除了有一个问题。当我向下滚动然后向上滚动时,这些自定义分隔线会消失。选择单元格会使它们再次出现,但滚动后它们很快会再次消失。

我知道这是由Autolayout约束引起的,因为我添加的先前的Autolayout约束并未导致此问题发生。如果您查看该链接的问题,您将了解到我遇到了这些自定义行的几个问题,并且能够解决所有问题,除了这个消失的问题。如果你能帮我解决这个问题,我一定会很感激。

这正是我设置分隔线的方式 - 我在viewDidLoad中执行此操作:

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

[cell.contentView addSubview:imageView];
imageView.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(imageView);

//Add a line separator above a cell:
//these constraints ensure the separator line is visible above the cell's accessory view
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-(%f@750)-[imageView]-(-%f@750)-|", indent, self.tableView.rowHeight] options:0 metrics:0 views:viewsDictionary]];
[cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:[imageView(0.5)]-(%f@750)-|", self.tableView.rowHeight] options:0 metrics:0 views:viewsDictionary]];

我的问题是,为什么这些Autolayout限制导致视图消失,我如何调整它们以确保它们始终可见?

1 个答案:

答案 0 :(得分:0)

我发现了一些解决了这些问题的限制因素:

    [cell addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                     attribute:NSLayoutAttributeTop
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:cell
                                                     attribute:NSLayoutAttributeTop
                                                    multiplier:1.0
                                                      constant:0.0]];
    [cell addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                     attribute:NSLayoutAttributeLeading
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:cell
                                                     attribute:NSLayoutAttributeLeading
                                                    multiplier:1.0
                                                      constant:indent]];
    [cell addConstraint:[NSLayoutConstraint constraintWithItem:imageView
                                                     attribute:NSLayoutAttributeTrailing
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:cell
                                                     attribute:NSLayoutAttributeTrailing
                                                    multiplier:1.0
                                                      constant:0.0]];
    [cell addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView(0.5)]" options:0 metrics:0 views:viewsDictionary]];