我必须构建一个自定义 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。