【发布时间】:2010-10-20 05:11:35
【问题描述】:
我目前有一个 UIView 子类作为我的 UITableViewController 的标题视图。所有子视图的大小都取决于为特定项目检索的数据。
在我确定每个标签的大小之前,UIView 会调用 layoutSubViews。这会导致问题,因为我在 layoutSubViews 方法中设置了视图的大小。由于它在我设置标签之前被调用,因此视图高度始终为 0。即使在设置标签之后我调用 setNeedsLayout 但表视图标题大小不会改变。
这将创建我的 TableHeaderView 并为我的标签设置文本。
TableHeaderView *tableHeaderView = [[TableHeaderView alloc] initWithFrame:CGRectZero];
tableHeaderView.headerTitle.text = title;
tableHeaderView.headerOption1.text = headerOption1
tableHeaderView.headerOption2.text = headerOption2
tableHeaderView.headerOption3.text = headerOption3
[[self tableView] setTableHeaderView:tableHeaderView];
[tableHeaderView setNeedsLayout];
[tableHeaderView release];
这是我的 UIView 子类
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
UIView *headerView = self;
self.headerTitle = [[UILabel alloc] initWithFrame:CGRectZero];
self.headerTitle.numberOfLines = 3;
self.headerTitle.lineBreakMode = UILineBreakModeWordWrap;
[headerView addSubview:self.headerTitle];
[self.headerTitle release];
self.headerOption1 = [[UILabel alloc] initWithFrame:CGRectZero];
self.headerOption1.numberOfLines = 2;
self.headerOption1.lineBreakMode = UILineBreakModeWordWrap;
[headerView addSubview:self.headerOption1];
[self.headerOption1 release];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
CGSize maxLabelSize;
/*...*/
[self.headerTitle setFrame:CGRectMake(10.0f, 10.0f, titleWidth, titleHeight)];
/*...*/
[self.headerOption1 setFrame:CGRectMake(10.0f, (self.headerTitle.frame.origin.y + self.headerTitle.bounds.size.height + 2.5f), pubWidth, pubHeight)];
/*...*/
[self setFrame:CGRectMake(0.0f, 0.0f, 320.0f, tableHeaderHeight)];
}
第二次调用 layoutSubViews 时,所有子视图的大小都正确,除了视图本身(tableHeaderHeight 具有正确的高度)。我不应该通过这种方法调整视图的大小吗?有更好的方法吗?
【问题讨论】:
标签: iphone uiview uitableview subclass