iOS 7.1 UitableviewCell内容与下面的内容重叠

Mat*_*cik 30 uitableview uilabel ios autolayout ios7.1

所以我有代码,它在iOS 7.0上成功运行,但在7.1中没有.我有一个简单的tableview,代码如下:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 70.0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    for (UIView *view in cell.contentView.subviews) {
        [view removeFromSuperview];
    }

    UILabel *label = [[UILabel alloc] init];
    label.text = [NSString string];

    for (NSInteger i = 0; i < 20; i++) {
        label.text = [label.text stringByAppendingString:@"label String "];
    }

    label.translatesAutoresizingMaskIntoConstraints = NO;
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWorldWrapping;
    //label.lineBreakMode = NSLineBreakByTruncatingTail; //I have tried this too
    [cell.contentView addSubview:label];

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

    if (indexPath.row == 0) {
        label.textColor = [UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0];
    }
    else if (indexPath.row == 1) {
        label.textColor = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0];
    }
    else if (indexPath.row == 2) {
        label.textColor = [UIColor colorWithRed:0 green:0 blue:1.0 alpha:1.0];
    }
    else {
        label.textColor = [UIColor colorWithWhite:0.3 alpha:1.0];
    }

    cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

我有1个10节.重复使用每一行我从contentView中删除所有子视图(我尝试了alloc-init UITableViewCell,但结果相同).

在iOS 7.0上,UILabel仅在其所属的单元格中显示.但在7.1中,UILabel继续显示另一个细胞.什么是有趣的,当我点击单元格时,它停止被其他人重叠,但直到我点击上面的单元格.我的问题是,如何使它在像7.1ones这样的7.1设备上运行.

我尝试了模拟器和设备,我看了一下iOS 7.1 API Diffs,但没有发现任何与此相关的内容.

也许这是自动布局的问题,我有可变高度的UILabel,但我需要这样做.我希望UILabel中包含所有文本,但只显示UILabel的一部分,可以显示在一个单元格中,这是7.0中的默认行为,但7.1更改了这一点,我不知道为什么以及如何处理它.

这是带有详细说明的图像的Dropbox文件夹:带图像的文件夹

更新:我尝试了像tese这样的东西,但没有任何对我有用.

cell.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.contentView.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);

cell.opaque = NO;
cell.contentView.opaque = NO;

cell.clearsContextBeforeDrawing = NO;
cell.contentView.clearsContextBeforeDrawing = NO;

cell.clipsToBounds = NO;
cell.contentView.clipsToBounds = NO;
Run Code Online (Sandbox Code Playgroud)

Rya*_*nJM 63

问题与细胞的高度有关.它不会动态地为您调整.

您可能会注意到,当您滚动并且上面的视图不在视图中时,重叠的文本将随之消失.

如果您希望文本在某个高度进行剪辑,则需要设置行数,而不是将其设置为0,因为这将使其永久持续.

lineBreakMode因为它不会停止将不会生效.

您可以尝试在contentView上设置剪辑,以确保所有子视图都保留在内部.

根据您想要的最终结果,您可以根据内容进行动态高度和更改.有很多与此相关的问题.

更新 - 剪切contentView

我必须自己尝试一下,但取而代之的是,这里有一些与剪切contentView相关的链接:

看起来像这样:

cell.clipsToBounds = YES;
Run Code Online (Sandbox Code Playgroud)


Gau*_*gla 6

这是在单元格中重叠内容的完美解决方案.

在分配单元格之后和添加子视图之前,只需在cellForRowAtIndexPath中使用下面的代码.

for (id object in cell.contentView.subviews)
{
    [object removeFromSuperview];
}  
Run Code Online (Sandbox Code Playgroud)

实际上发生了重叠,因为无论何时滚动tableview,它都会一次又一次地分配你添加的视图.因此,上面的代码将通过从单元格的contentView中删除现有视图来解决您的问题.

现在你可以在应用上面的代码后看到内存调试会话,这次你的内存是稳定的.

希望它能帮到你.

谢谢 !