UITableViewHeaderFooterView和Interface Builder:如何调整不同设备的宽度?

时间:2015-04-19 21:16:10

标签: ios uitableview autolayout

我正在为UITableView实现自定义标头视图。我创建了一个扩展HeaderView的{​​{1}}类和一个用于此视图的Nib文件。

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

UITableViewHeaderFooterView

然后设置为标题:

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

有同样的问题......我发现的唯一解决方案是将自定义 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 可能会出现自动布局问题,尤其是当您从笔尖加载时。

答案 1 :(得分:0)

我会看几件事。

如果使用弹簧和支柱,则尝试设置autoResizingMask

[maskingBackground setAutoresizingMask:UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth];

如果使用autolayout然后固定到tableWidth并使用恒定高度约束。

如果这不符合您的需求,我会在您的标题视图类

中使用它
-(void)willMoveToSuperview:(UIView*)superview

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