使用多行UILabel的自定义Tableview单元格需要dynamic高度

我用Interface Builder创build了一个自定义的TableView单元格。 这是它的样子:

IB自定义表格单元格

对于描述标签,我需要这样做,所以我把它设置为这样:

描述标签的设置

在我的SettingsPageViewController,我有以下表视图方法重写:

@implementation SBSettingsViewController { NSArray *settingHeaders; NSArray *settingDescriptions; } - (void)viewDidLoad { [super viewDidLoad]; [self setupLeftMenuButton]; // Do any additional setup after loading the view from its nib. settingHeaders = [NSArray arrayWithObjects:@"Label Header 1",@"Label Header 2",nil]; settingDescriptions = [NSArray arrayWithObjects:@"Two line description Two line description Two line description ",@"One Line Description",nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [settingHeaders count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *simpleTableIdentifier = @"SettingsTableCell"; SettingsTableViewCell *cell = (SettingsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SettingsTableCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.settingsHeaderLabel.text = [settingHeaders objectAtIndex:indexPath.row]; cell.settingsDescriptionLabel.text = [settingDescriptions objectAtIndex:indexPath.row]; cell.settingsDescriptionLabel.lineBreakMode = NSLineBreakByWordWrapping; cell.settingsDescriptionLabel.numberOfLines = 0; CGRect appFrame=[[UIScreen mainScreen] bounds]; cell.settingsDescriptionLabel.preferredMaxLayoutWidth = appFrame.size.width - 15; [cell.settingsDescriptionLabel sizeToFit]; [cell.settingsDescriptionLabel setNeedsDisplay]; [cell layoutIfNeeded]; return cell; } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { [tableView setLayoutMargins:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 85; } 

下面是结果页面的样子:

在这里输入图像说明

正如你所看到的,第一个tableview单元格的描述标签不会自动换行。 它只是切断。 我如何使它包裹?

此外,我想要dynamic调整Tableview单元格高度。 我试图改变heightForRowAtIndexPath:成为UITableViewAutomaticDimension,但这只是使它看起来超级怪异的:

在这里输入图像说明

如何获得调整行的表格视图高度,1行描述标签略短?

感谢您的帮助!

将标题标签顶部,引导,尾随到超级视图和底部(垂直)的约束给予描述标签。 相同的描述标签>领先,尾部和底部边缘超级观点。

现在设置标题标签高度固定和描述标签制作多行(行数= 0)

在viewDidLoad中设置表格视图

 _tableView.estimatedRowHeight = 100.0; _tableView.rowHeight = UITableViewAutomaticDimension; 

让我知道这个是否奏效…