动态改变目标C中细胞的高度 [英] dynamically change height of cells in objective C

查看:92
本文介绍了动态改变目标C中细胞的高度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个带有表格视图的应用程序。它使用每个单元格中的视图和标签。但是如果我在(!单元格)代码中创建视图和单元格,它将返回空单元格,如果我删除(!单元格)条件,它将显示数据但不采用动态高度。任何人都可以帮助我。

I have created an app with a table view. Which uses a view and a label in each cell. But if I create the views and cells in the (!cell) code it returns empty cells and if I remove the (!cell) condition it displays the data but does not take dynamic height. Can anyone please help me.

- (void)viewDidLoad{ 
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", LanguageFile]];

NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:DataPath];

self.reloadArray = [tempDict objectForKey:@"Rows"];}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [self.reloadArray count];
}

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get data for the current row
  NSString *textData = [reloadArray objectAtIndex:indexPath.section]

CGFloat dataTextHeight = [self getLabelHeightForIndex:textData];

    if(dataTextHeight < 44)
    {
        dataTextHeight = 44;
    }

    return dataTextHeight;
}

-(CGFloat)getLabelHeightForIndex:(NSString *)string
{
CGSize maximumSize = CGSizeMake(280, 10000);

CGSize labelHeightSize = [string sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14.0f] constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];

if(labelHeightSize.height < 44){
    labelHeightSize.height = 44;
}

return labelHeightSize.height;
}



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

static NSString *CellIdentifier = @"Cell";

static const int textViewTag = 1, textLabelTag = 2;

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"standard_back.png"]];

img.frame = tableView.frame;
tableView.backgroundView = img;

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (!cell) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    // First view
    UIView *textView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, 280.0, 36.00)];
    textView.tag = textViewTag;
    textView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    [cell.contentView addSubview:textView];

    // First label
    UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, 270.0, 36.00)];
    textLabel.tag = textLabelTag;
    textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0f];
    textLabel.textColor = [UIColor whiteColor];
    textLabel.backgroundColor = [UIColor clearColor];
    textLabel.numberOfLines = 0;
    textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    // textLabel.clipsToBounds = YES;
    [cell.contentView addSubview:textLabel];
}


    NSString *textData = [reloadArray objectAtIndex:(indexPath.section)];

    CGFloat dataTextHeight = [self getLabelHeightForIndex:textData];

    UIView *textView = [cell.contentView viewWithTag:textViewTag];
    CGRect textViewFrame = textView.frame;
    textView.frame = CGRectMake(0.0, 0.0, textViewFrame.size.width, dataTextHeight);

    UILabel *textLabel = [cell.contentView viewWithTag:textLabelTag];
    CGRect textLabelFrame = textLabel.frame;
    textLabel.frame = CGRectMake(10.0, 0.0, textLabelFrame.size.width, dataTextHeight);
    textLabel.text = textData;
    textLabel.backgroundColor= [UIColor clearColor];
    textLabel.textAlignment = NSTextAlignmentCenter;


cell.backgroundColor = [UIColor colorWithWhite:0 alpha:.65];
cell.textLabel.numberOfLines = 0; // Multiline
cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
cell.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

return cell;
}

提前致谢。

推荐答案

这是我在我的应用中使用的代码的一部分。它很适合我。如果你需要帮助,请给我打电话。

This is a part of my code which i used in my app. It works for me fine.Ping me if u need help.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
CGSize constraintSize = {230.0, 20000}; //230 is cell width & 20000 is max height for cell
CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row]] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize  lineBreakMode:UILineBreakModeCharacterWrap];


return MAX(45, neededSize.height +33);


}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

{        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];


}


CGSize constraintSize = {230.0, 20000};


UILabel* label = [[UILabel alloc] init];

[label setNumberOfLines:0];

label.backgroundColor = [UIColor clearColor];

[label setFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f]];

label.adjustsFontSizeToFitWidth = NO;
CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize  lineBreakMode:UILineBreakModeCharacterWrap];
// NSLog(@"Height%f",neededSize.height);
//NSLog(@"width%f",neededSize.width);
[label setText:[NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ]];

[label setFrame:CGRectMake(10, 2, 230, MAX(neededSize.height+30, 44.0f))];

[[cell contentView] addSubview:label];




cell.selectionStyle=UITableViewCellSelectionStyleNone;


return cell;


}

希望有所帮助。!!!

Hope it helps.!!!

这篇关于动态改变目标C中细胞的高度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆