iphone - 增加包含 2 个 UILabel 的自定义 UITableViewCell 的大小

标签 iphone ios uitableview

我正在开发 UITableView。在我的应用程序中,我要在 2 个部分中显示一些数据,并且我有一个 自定义单元格,实际上在 customCell 中我有 2 个 UILabel 标签1和标签2。 第一个部分没问题,因为它有简单的数据要显示,但是当我显示第二部分时,我有 4 行要显示,其中 3 行有更大的字符串要显示。因此,为了显示该标签,我增加了 Cell 和 UILabel View 的高度。

为了增加单元格的高度,我实现了方法heightForRowAtIndexPath如下

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (1 == indexPath.section && 0 != indexPath.row)
    {
        return _profileTableView.rowHeight + 50.0;        
    }
    else
    {
        return _profileTableView.rowHeight;
    }

}

heightForRowAtIndexPath 方法中的问题是,只有第三行和第四行的大小增加,当我尝试将新框架设置为 label1 和 label2 时,没有出现任何变化。标签显示在细胞。

这就是我实现cellForRowAtIndexPath方法的方式

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

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = (CustomCell *)[nib objectAtIndex:0];
    cell.label1.font = [UIFont fontWithName:defaultFont size:18];
    cell.label2.font = [UIFont fontWithName:defaultBoldFont size:18];

    if(0 == indexPath.section)
    {
        // first section is fine
    }
    else
    {
        switch (indexPath.row)
        {
            case 0:
            {
                cell.label1.text  = @"Data 1:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:key];
                [cell.label2 sizeToFit];
                break;
            }

            case 1:
            {              
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:aKey];
                [cell.label2 sizeToFit];

                break;
            }

            case 2:
            {  
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;              
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:bKey];
                [cell.label2 sizeToFit];
                break;
            }

            case 3:
            {
                cell.label2.numberOfLines = 5;
                cell.label2.lineBreakMode = NSLineBreakByClipping;
                cell.label1.text = @"Data 2:";
                [cell.label1 sizeToFit];
                CGRect frame = cell.label1.frame;
                frame.origin.y = 11;
                cell.label1.frame = frame;

                frame = cell.label2.frame;
                frame.origin.x = cell.label1.frame.size.width + cell.label1.frame.origin.x+5;
                frame.origin.y = 11;
                cell.label2.frame = frame;
                cell.label2.text = [[NSUserDefaults standardUserDefaults] valueForKey:cKey];
                [cell.label2 sizeToFit];
                break;
            }                

        }
    }

    return cell;
}

我搜索得足够多,但没有答案对我有用。 请帮忙。 提前致谢。

最佳答案

试试这个代码:-

  - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.section !=0 && indexPath.row !=0)
        {
            return 44.0 + 50.0;        
        }
        else
        {
            return _profileTableView.rowHeight;
        }

     return 44.0;
    }

希望能帮助您解决问题。

关于iphone - 增加包含 2 个 UILabel 的自定义 UITableViewCell 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078358/

相关文章:

ios - iOS中 “CFNetwork SSLHandshake failed(-9807)”的处理方法

objective-c - IOS中的即时/自动保存

ios - 默认实现中缺少 UITableViewCell detailTextLabel

TableView 单元格项的 iOS 不同 View

iphone - 如何使 UIWebView 平滑滚动?

ios - 如何更改 xcode 中的 .mobileprovision

ios - 如何在通过 MVVMCROSS 绑定(bind)后动态调整自定义 mvxtableviewcell 的大小

iphone - iPhone 版 OpenGL ES

iphone - 使用动画切换 View UIViewAnimationTransitionCurlUp

ios - 使用 Flutter 包 firebase_messaging 的后台通知不适用于 iOS