systemLayoutSizeFittingSize不适用于外部Xib单元

时间:2014-11-14 03:38:50

标签: ios objective-c uitableview autolayout xib

我遇到这个问题已经困难了2天。

我在故事板上有一个带UITableView的UIViewController。

但是我想重新设计自定义单元格,所以我使用Xib文件来设计单元格。

单元格包含一个标签,该标签在运行时获取内容,因此它的高度会有所不同。

我正在使用autolayout我有所有约束并将我的标签行设置为0;

-(void)viewDidLoad
{
  [super viewDidLoad];
  // Do any additional setup after loading the view.

  self.tableView.dataSource = self;
  self.tableView.delegate = self;

  [self.tableView registerNib:[UINib nibWithNibName:@"PostingTableViewCell" bundle:   [NSBundle mainBundle]] forCellReuseIdentifier:@"PostingCell"];

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"PostingCell";

self.customCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (self.customCell == nil)
{
    self.customCell = [[PostingTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSDictionary *post = [self.posts objectAtIndex:indexPath.section];

NSString *contentString = [post objectForKey:@"content"];

self.customCell.contentLabel.text = contentString;

self.customCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(self.customCell.bounds));


[self.customCell setNeedsLayout];
[self.customCell layoutIfNeeded];

CGFloat height = [self.customCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

return height;

}

当我将自定义单元格放在故事板中的tableViewController上时,我的代码有效,但当我将其迁移到xib文件时,tableviewcell的高度不再调整。

这是我的xib文件和约束的屏幕截图  enter image description here

这是我的cellForRowAtIndexPath方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PostingCell";

PostingTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

NSDictionary *post = [self.posts objectAtIndex:indexPath.section];

NSString *contentString = [post objectForKey:@"content"];

cell.contentLabel.text = contentString;
}

模拟器截图 enter image description here

当我将高度硬编码到下面的150截图时:

enter image description here

1 个答案:

答案 0 :(得分:0)

我仍然不确定你为什么要在heightForRowAtIndexPath

中做这些事情
 static NSString *CellIdentifier = @"PostingCell";

self.customCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


if (self.customCell == nil)
{
self.customCell = [[PostingTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

试试这个 1.在xib中调整单元格的高度。 2.尝试这样的事情

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath     *)indexPath
{
return self.customCell.bounds.size.height;
}