4

我必须构建一个自定义 tableViewHeader ,其中至少应显示两个标签,即。一个项目名称和项目描述。这两个标签的内容不同(即在字符串长度方面)。

我设法获得了默认设备方向(纵向)的工作版本,但是如果用户将设备旋转为横向,我的自定义 headerView 的宽度不会调整,并且用户将在右侧看到未使用的空白区域。

正在使用以下代码片段:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 50.0f;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{    
    CGFloat wd = tableView.bounds.size.width;
    CGFloat ht = tableView.bounds.size.height;
    UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0., 0., wd, ht)];
    headerView.contentMode = UIViewContentModeScaleToFill;
    // Add project name/description as labels to the headerView.
    UILabel *projName = [[UILabel alloc] initWithFrame:CGRectMake(5., 5., wd, 20)];
    UILabel *projDesc = [[UILabel alloc] initWithFrame:CGRectMake(5., 25., wd, 20)];
    projName.text = @"Project: this project is about an interesting ..";
    projDesc.text = @"Description: a very long description should be more readable when your device is in landscape mode!";
    [headerView addSubview:projName];
    [headerView addSubview:projDesc];
    return headerView;
}

我注意到tableView:viewForHeaderInSection:只会在 之后调用一次viewDidLoad,但不会在设备方向更改之后调用。

我是否应该使用以下方法实现该willRotateToInterfaceOrientation:方法:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration
{
    [self.tableView reloadSections:nil withRowAnimation:UITableViewRowAnimationNone];
}

我无法弄清楚如何使之reloadSections:工作,从而强制重新计算我的 customView。

4

1 回答 1

7

如果您使用 autoresizingMask,标题会在旋转时正确调整。无需覆盖其他任何内容。在返回视图之前,我会在代码末尾设置自动掩码:

    [headerView addSubview:projName];
    [headerView addSubview:projDesc];
    projName.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
    projDesc.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
    headerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    return headerView;
于 2012-11-12T01:47:40.040 回答