5

我正在使用 iOS9 XCode7 我需要根据 labelText Height 动态更改单元格的高度

我用过:

self.tableView.rowHeight=UITableViewAutomaticDimension;

但它不适用于定制电池。 sizetoFit在 iOS9 中被删除。

请提出一些建议。谢谢

4

3 回答 3

14

给出相对于单元格、顶部、底部、左侧和右侧的标签约束。

比您的单元格大小会随着内容高度的增长而增长。

也让你的标签多行。(通过在属性检查器中将 Lines 属性设置为 0)

#pragma mark- Menu table Delegates 

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

    return UITableViewAutomaticDimension;
}

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

    return UITableViewAutomaticDimension;
}
于 2016-05-04T08:45:24.410 回答
1

我不太确定这句话是什么意思(截图会有所帮助):

“我需要根据 labelText 高度动态更改单元格的高度”

那么,您有一个UITableViewCell, 包含一个UILabel, 并希望表格中的每个单元格都有一个高度取决于该单元格的标签 ?

这是我使用的代码。

在我的UITableViewCell课堂上,我将定义一个静态函数来测量,并返回我的 .xib 文件的高度:

@implementation MikesTableViewCell

...

+(CGSize)preferredSize
{
    static NSValue *sizeBox = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // Assumption: The XIB file name matches this UIView subclass name.
        NSString* nibName = NSStringFromClass(self);
        UINib *nib = [UINib nibWithNibName:nibName bundle:nil];

        // Assumption: The XIB file only contains a single root UIView.
        UIView *rootView = [[nib instantiateWithOwner:nil options:nil] lastObject];

        sizeBox = [NSValue valueWithCGSize:rootView.frame.size];
    });
    return [sizeBox CGSizeValue];
}

@end

然后,在我的UIViewController课堂上,我会告诉我UITableView使用这个单元格,找出它的高度。

@property (nonatomic) float rowHeight;

UINib *cellNib = [UINib nibWithNibName:@"MikesTableViewCell" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"CustomerCell"];

rowHeight = [MikesTableViewCell preferredSize].height;

...

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

同样,这可能不是您正在寻找的,但我希望这会有所帮助。

于 2016-05-04T08:58:26.787 回答
1

试试这个。就是这么简单。

在 heightForRowAtIndexPath 方法中设置此高度

  float vendorNameHeight = [vendorNameLbl.text heigthWithWidth:width andFont:[UIFont fontWithName:@"Signika-Light" size:21.0]];

然后

  UILabel*vendorNameLbl=[[UILabel alloc]initWithFrame:CGRectMake( 13, 11, 100, 22)];
  vendorNameLbl.numberOfLines = 0;
  [vendorNameLbl sizeToFitVertically];
于 2016-05-04T10:41:56.507 回答