UITableViewHeaderFooterView and Interface Builder:如何调整不同设备的宽



我正在为我的UITableView实现自定义标题视图。我创建了一个扩展UITableViewHeaderFooterViewHeaderView 类,并为此视图创建了一个 Nib 文件。

在视图控制器中,我注册了它:

[self.tableView registerNib:[UINib nibWithNibName:@"HeaderView" bundle:[NSBundle mainBundle]] forHeaderFooterViewReuseIdentifier:@"HeaderView"];

然后设置为标题:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
  HeaderView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"HeaderView"];
  return view;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
  return 26.0f;
}

问题是视图的宽度始终与 nib 文件中的宽度相同。由于现在有多个屏幕宽度,我不能简单地在 nib 文件中将视图宽度设置为 320(或表格视图的宽度)。

我应该如何设置标题视图,使其自动适合表格宽度?

更新:当我将视图模拟指标从推断更改为固定指标(在本例中为 iPhone 3.5")时,这是一个比较:

IMG http://cl.ly/image/451n2N303J3S/Image%202015-04-19%20at%206.39.58%20PM.png

有同样的问题...我找到的唯一解决方案是将自定义UITableViewHeaderFooterView中子视图的所有框架设置为相应状态。

脏的例子:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    NSString *headerIdentifier = @"SectionHeader";
    TableViewHeaderFooterView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerIdentifier];
    if (headerView == nil) {
        headerView = [[TableViewHeaderFooterView alloc] initWithReuseIdentifier:headerIdentifier];
    }
    .....
    [headerView setWidthForSubviews:tableView.frame.size.width]; // set the right width of the right subviews
    ....
    return headerView;
}

在 TableViewHeaderFooterView

- (void)setWidthForSubviews:(CGFloat)width {
    for (UIView *view in @[[self viewWithTag:1],[self viewWithTag:2],[self viewWithTag:3], ...]) {
        view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, width, view.frame.size.height);
    }
}

如果有人找到另一个解决方案,我将不胜感激,但似乎UITableViewHeaderFooterView可能在自动布局方面存在问题,特别是如果您从笔尖加载它。

我会看几件事。

如果您使用弹簧和支柱,请尝试设置自动调整大小蒙版

[maskingBackground setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];

如果使用自动布局,则固定到 tableWidth 并使用恒定高度约束。

如果这不能满足您的需求,我会考虑在您的标题视图类中使用它

-(void)willMoveToSuperview:(UIView*)superview

并使用superview.frame.size在那里设置你的框架来指导你。

最新更新