iOS 7.1 UitableviewCell 内容与下面的重叠

标签 ios uitableview uilabel autolayout ios7.1

所以我有代码,可以在 iOS 7.0 上成功运行,但不能在 7.1 上运行。我有一个简单的表格 View ,带有代码:

- (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;
}

我有 1 个部分,有 10 行。重用每一行后,我从 contentView 中删除所有 subview (我尝试了 alloc-init UITableViewCell,但结果相同)。

在 iOS 7.0 上,UILabel 只显示在它所属的单元格中。但在 7.1 中,UILabel 继续显示在另一个单元格上。有趣的是,当我点击单元格时,它不再与其他单元格重叠,但直到我点击上面的单元格。 我的问题是,如何让它在 7.1 设备上像在 7.0 设备上一样工作。

我尝试了模拟器和设备,并查看了 iOS 7.1 API 差异,但没有发现与此相关的内容。

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

这是带有详细说明的图像保管箱文件夹:Folder with images

更新:我试过像 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;

最佳答案

问题与单元格的高度有关。它不会为您动态调整。

您可能会注意到,当您滚动并且上面的 View 超出 View 时,重叠的文本将随之消失。

如果您希望您的文本在特定高度裁剪,那么您需要设置行数,而不是将其设置为 0,因为这将让它永远持续下去。

lineBreakMode 不会生效,因为它没有停止。

您可以选择尝试在 contentView 上设置裁剪以确保所有 subview 都在里面。

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

更新 - 裁剪 contentView

我必须自己尝试一下,但代替那个,这里有几个与裁剪 contentView 相关的链接:

看起来像这样:

cell.clipsToBounds = YES;

关于iOS 7.1 UitableviewCell 内容与下面的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358831/

相关文章:

ios - 一个 IBAction 用于多个带按钮的自定义原型(prototype)单元

iphone - 如何实现带有行和列的表格

uitableview - (iOS)为什么导航 Controller 中的第二个 'push' segue总是崩溃?

ios - 如何将函数调用(不是超链接)添加到 UILabel 中的 NSAttributedString 的一部分?

ios - 在特定时间后更改 UILabel

objective-c - 响应外部键盘输入的 iPad UIButtons

ios - 警报字段关闭一个

ios - Swift 中的 UnsafeMutablePointer<Unmanaged<CMSampleBuffer>?> 是什么?

iphone - 当应用程序重新启动时,如何保留 UITextField 中存储在 plist 中的数据?

ios - 将尝试通过打破约束来恢复 <NSLayoutConstraint :0x17008b130 UILabel