如何在UITableViewCell中设置动态标签大小

时间:2016-07-15 08:35:07

标签: ios objective-c uitableview uilabel

我有TableViewCell并通过Web服务(JSON)加载数据,数据存储在不同的数组中,数据加载在tableview中。我希望将数据大小放大一段时间,并将时间缩短一些。那么如何管理标签尺寸。我试过可能的例子,但不做动态标签。请帮忙,谢谢。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return  1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [title count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //NSLog(@"tableview cell");
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"event"];
    if (cell==nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: [img objectAtIndex:indexPath.row]]];
    UIImage* image = [[UIImage alloc] initWithData:imageData];
    cell.img.image =image;

    cell.lbl_1.text=[NSString stringWithFormat:@"%@",[title objectAtIndex:indexPath.row]];

    cell.lbl_2.text=[NSString stringWithFormat:@"%@",[des objectAtIndex:indexPath.row]];
    cell.lbl_3.text=[NSString stringWithFormat:@"%@",[evnt_ary objectAtIndex:indexPath.row]];

    return  cell;
}

6 个答案:

答案 0 :(得分:3)

请检查UITableViewAutomaticDimension并将其用作:

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableView.automaticDimension

确保您的约束正确。

答案 1 :(得分:1)

在为该标签指定文字后,您只需要写 [yourCell.yourlabel sizeToFit]

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    yourCell.yourlabel.text = @"text whatever you want to set";
    [yourCell.yourlabel sizeToFit];
}

同时为 yourCell.yourlabel 指定文字,并在heightForRowAtIndexPath中写下[yourCell.yourlabel sizeToFit]。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    yourCustomCell *yourCellObj = (yourCustomCell *)[self tableView:self.tableViewObj cellForRowAtIndexPath:indexPath];

    yourCellObj.yourlabel.text = @"text whatever you want to set";
    [yourCellObj.yourlabel sizeToFit];

    return (yourCellObj.yourlabel.frame.origin.y + yourCellObj.yourlabel.frame.size.height);
}

答案 2 :(得分:0)

首先,为tableView使用自定义单元格。如果直接在tableView上使用label,则在动态更改大小时会导致加载问题。

然后在" cellForRowAtIndexPath"中,您可以更改其属性。例如,如果" TableCell"是你的自定义单元格

.child

答案 3 :(得分:0)

CGSize maximumSize = CGSizeMake(width_specified, CGFLOAT_MAX);


CGSize myStringSize = [myString sizeWithFont:myFont 
                           constrainedToSize:maximumSize 
                               lineBreakMode:self.myLabel.lineBreakMode];

您可以计算字符串所需的高度,以适合给定宽度的标签或文本视图。

您还需要指定字符串的字体。即。字符串容器中使用的字体。

答案 4 :(得分:0)

你必须获得动态宽度和宽度高度取决于标签的内容(文本),因此您可以使用以下功能,它将返回CGSize,您只需传递您的标签参数。

(int) strtol(str, (char **)NULL, 10)

答案 5 :(得分:0)

plz取桌子的出口

@property (strong, nonatomic) IBOutlet UITableView *view_tableView;


- (void)viewDidLoad {
    [super viewDidLoad];
    self.view_tableView.estimatedRowHeight = 50;
    self.view_tableView.rowHeight = UITableViewAutomaticDimension;
    // Do any additional setup after loading the view, typically from a nib.
}


#pragma mark - TableView Delegate And DataSource



-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{


    return 1;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"mycell"];
    UILabel *label =(UILabel *)[cell viewWithTag:5000];

    label.text=@"Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.2016-07-15 15:22:28.819 Time'nTask[257:14278] Notification settings registered2016-07-15 15:22:28.820 Time'nTask[257:14278] Successfully registered for remote notifications With device Token 68048cc293d695fd3220cf63da3baa685675126ecd72af0547b760ee31571b62";

    return cell;
}

rember set line number of line = 0

enter image description here