我正在为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
答案 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在那里设置你的框架来指导你。