我正在为我的UITableView
实现自定义标题视图。我创建了一个扩展UITableViewHeaderFooterView
的 HeaderView
类,并为此视图创建了一个 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在那里设置你的框架来指导你。