代码之家  ›  专栏  ›  技术社区  ›  Jonathan

动态改变原型单元的高度

  •  0
  • Jonathan  · 技术社区  · 12 年前

    我正在尝试给我的标签添加一些文本。一旦文本大于指定的单元格高度。我希望细胞也能长得很高。我确实添加了以下代码来处理我的标签高度,但我不确定如何将其传播到我的细胞中。

    密码

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        self.navigationItem.title = @"Scribbles";
        //Array
        Scribble *scribble1 = [Scribble new];
        [scribble1 setTitle:@"Test 1" andBody:@"This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun! This is fun!" andImage:@"scribble.png"];
        Scribble *scribble2 = [Scribble new];
        [scribble2 setTitle:@"Test 2" andBody:@"This is fun!" andImage:@"scribble2.png"];
        Scribble *scribble3 = [Scribble new];
        [scribble3 setTitle:@"Test 3" andBody:@"This is fun!" andImage:@"scribble3.png"];
        Scribble *scribble4 = [Scribble new];
        [scribble4 setTitle:@"Test 4" andBody:@"This is fun!" andImage:@"scribble.png"];
        Scribble *scribble5 = [Scribble new];
        [scribble5 setTitle:@"Test 5" andBody:@"This is fun!" andImage:@"scribble2.png"];
        Scribble *scribble6 = [Scribble new];
        [scribble6 setTitle:@"Test 6" andBody:@"This is fun!" andImage:@"scribble3.png"];
        Scribble *scribble7 = [Scribble new];
        [scribble7 setTitle:@"Test 7" andBody:@"This is fun!" andImage:@"scribble.png"];
        Scribble *scribble8 = [Scribble new];
        [scribble8 setTitle:@"Test 8" andBody:@"This is fun!" andImage:@"scribble3.png"];
    
        scribbles = [NSArray arrayWithObjects:
                     scribble1,scribble2,scribble3,scribble4,scribble5,scribble6,scribble7,scribble8, nil];
    }
    
    //To make the Selection disappear
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
    
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        // Return the number of sections.
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return scribbles.count;
    }
    
    //Loading stuff into tableView
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"ScribbleCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    
        if (cell == nil){
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
        }
    
        Scribble *scribble = [scribbles objectAtIndex:indexPath.row];
    
        UIImageView *scribbleImageView = (UIImageView *)[cell viewWithTag:100];
        scribbleImageView.image = [UIImage imageNamed:scribble.image];
        scribbleImageView.layer.cornerRadius = 18.0;
        scribbleImageView.clipsToBounds = YES;
    
        UILabel *scribbleNameLabel = (UILabel *)[cell viewWithTag:101];
        scribbleNameLabel.text = scribble.title;
    
        UILabel *scribbleBodyLabel = (UILabel *)[cell viewWithTag:102];
        [scribbleBodyLabel setLineBreakMode:NSLineBreakByWordWrapping];
        scribbleBodyLabel.numberOfLines = 0;
        scribbleBodyLabel.text = scribble.body;
        [scribbleBodyLabel sizeToFit];
        return cell;
    }
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   Anupdas Vivek Sehrawat    12 年前

    如果您使用的是原型单元格,那么每次只要标识符正确,dequeueReusableCellWithIdentifier就会返回一个单元格。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"ScribbleCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    
        Scribble *scribble = scribble[indexPath.row];
    
        UIImageView *scribbleImageView = (UIImageView *)[cell viewWithTag:100];
        scribbleImageView.image = [UIImage imageNamed:scribble.image];
        scribbleImageView.layer.cornerRadius = 18.0;
        scribbleImageView.clipsToBounds = YES;
    
        UILabel *scribbleNameLabel = (UILabel *)[cell viewWithTag:101];
        scribbleNameLabel.text = scribble.title;
    
        UILabel *scribbleBodyLabel = (UILabel *)[cell viewWithTag:102];
        [scribbleBodyLabel setLineBreakMode:NSLineBreakByWordWrapping];
        scribbleBodyLabel.numberOfLines = 0;
        scribbleBodyLabel.text = scribble.body;
        return cell;
    }
    
        - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
        {
            Scribble *scribble = scribble[indexPath.row];
    
            NSString *scribbleBody = scribble.body;
            UIFont *cellFont = [UIFont systemFontOfSize:17.0f];
            /*Instead of hardcoded width you can find width from tableView frame 
            imageView and their offsets 20 for tableView ,40 for imageView, 30 for 
            offset of body label  */
            CGFloat width = tableView.frame.size.width - 90.0f;
            CGSize constraintSize = CGSizeMake(width, MAXFLOAT);
            CGSize labelSize = [scribbleBody sizeWithFont:cellFont
                                        constrainedToSize:constraintSize
                                            lineBreakMode:NSLineBreakByWordWrapping];
    
            //Add the height of scribbleNameLabel +offset
            return labelSize.height + 40.0f;
        }
    
        2
  •  0
  •   Community Mohan Dere    8 年前

    您需要使用委托方法 heightForRowAtIndexPath 对于 UITableView ,在这里你可以根据你的文本调整高度 UITableViewCell 你可以 follow the thread 这对你的案子有帮助