我必须构建一个自定义的tableViewHeader,其中至少应显示两个标签,即。 projectName和projectDescription。这两个标签的内容各不相同(即就字符串长度而言)。
我设法获得默认设备方向(纵向)的工作版本,但如果用户将设备旋转到横向,则不会调整自定义headerView的宽度,并且用户将看到右侧未使用的空白区域。 / p>
正在使用以下代码片段:
- (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。
答案 0 :(得分:7)
如果使用autoresizingMask,则标题会在旋转时正确调整。无需覆盖任何其他内容。我会在返回视图之前在代码的末尾设置自动掩码:
[headerView addSubview:projName];
[headerView addSubview:projDesc];
projName.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
projDesc.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
headerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
return headerView;