Почему tableVieW: viewForHeaderInSection игнорирует свойство frame моего UILabel?
В основном я хочу изменить шрифт и цвет заголовка раздела, поэтому я реализую tableVieW:viewForHeaderInSection
. Сначала я пробовал этот код:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel* headerLabel = [[[UILabel alloc] init] autorelease];
headerLabel.frame = CGRectMake(10, 0, 300, 40);
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor blackColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.text = @"My section header";
return headerLabel;
}
но по какой-то причине свойство кадра игнорируется (я говорю о вставке 10px слева). Теперь я использую следующее:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView* headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 40)] autorelease];
UILabel* headerLabel = [[UILabel alloc] init];
headerLabel.frame = CGRectMake(10, 0, 300, 40);
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.textColor = [UIColor blackColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.text = @"My section header";
[headerView addSubview:headerLabel];
[headerLabel release];
return headerView;
}
с желаемыми результатами. Может кто-нибудь объяснить мне, почему работает второй подход, а первый нет?
PS. В обоих случаях я реализую tableView:heightForHeaderInSection
, возвращая 40.0
Ответы
Ответ 1
Это потому, что UITableView автоматически устанавливает кадр вида заголовка, который вы предоставляете
(0, y, table view width, header view height)
y
- вычисленное положение вида и
header view height
- это значение, возвращаемое tableView:heightForHeaderInSection:
Ответ 2
Может быть, лучше добавить subview:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let label = UILabel(frame: CGRect(x: 15, y: 5, width: tableView.frame.width, height: 20))
label.text = "\(sections[section].year)"
view.addSubview(label)
return view
}