2017-09-16 163 views
0

我需要非常简单的事情 - 表格单元格自动检测自己的高度。这里有很多例子,基本上都是这样说的:“在桌子上设置几个标志和值,并在你的单元格中使用自动布局”。我的情况有点特别 - 我从单独的XIB文件加载单元格的内容,这是一个普通的UIView。第一个问题是当我在界面构建器中创建XIB文件时 - 我不知道如何根据我指定的约束使它成为“计算”的高度。我总是收到IB错误,除非我切换到“自由格式”并将视图调整到与我的约束条件相匹配的高度。如果我不这样做,我会得到以下错误:iOS版表格视图单元格自动高度自定义的子视图

enter image description here

在上述例子中我只需要其高度将是32(图像高度)的图+ 2 * 16(垂直距离约束来自父母的顶部和底部的图像)加上边距。调整在IB的自由视图,直到错误消失似乎是一个肮脏的黑客对我来说,这其实并没有自动布局。作为下一个步骤,我定义了一个电池类,在这里我把这个厦门国际银行看来,这样的事情(抱歉objc代码,几乎完成了移植项目SWIFT)

- (void)awakeFromNib { 
    [super awakeFromNib]; 

    [[NSBundle mainBundle] loadNibNamed:@"CellContent" owner:self options:nil]; 

    // self.content is an outlet which gets the root of the XIB on load 
    [self.contentView addSubview:self.content]; 

    self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 
    [self.contentView.leftAnchor constraintEqualToAnchor:self.content.leftAnchor].active = YES; 
    [self.contentView.rightAnchor constraintEqualToAnchor:self.content.rightAnchor].active = YES; 
    [self.contentView.topAnchor constraintEqualToAnchor:self.content.topAnchor].active = YES; 
    [self.contentView.bottomAnchor constraintEqualToAnchor:self.content.bottomAnchor].active = YES; 
} 

正如你可能已经猜到,当我运行这个时,单元格高度是一个很大的自由格式,就像在内容XIB的IB中一样,所以没有自动布局。看起来自由曲面高度甚至被添加为另一个约束,并且存在约束冲突,导致其中一些在运行时被破坏。

让我知道如何解决这个问题,轻松地为我的单元格创建内容视图,这些单元格具有自动高度,并且可以嵌入我的单元格中以获得tableView.rowHeight = UITableViewAutomaticDimension魔法?

回答

0

我发现了什么是我的问题。实际上,由于自动调整,与添加的约束存在冲突。所以我改变了这条线(从上面的问题):

self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 

到:

self.content.translatesAutoresizingMaskIntoConstraints = NO; 

愚蠢的错误,translatesAutoresizingMaskIntoConstraints标志应为孩子视图添加后被禁止,不为父母看法,因为我错误地做了。之后,具有细胞自动检测功能的魔法开始像魅力一样工作。

0
  1. 请确保UILabel具有多行属性。所以,设置0Line PropertyAttribute Inspector
  2. 确保UILabelAuto-Layout正确地相对于Left-Right-Top-Bottom
  3. 应用这些委托功能:

    -(CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

    { 
    
        return UITableViewAutomaticDimension; 
    } 
    
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    
        return UITableViewAutomaticDimension; 
    } 
    
相关问题