Храните UITableView padding в заголовке, но нет в разделителе на IOS7
с переходом на iOS7 разделитель имеет 15px дополнение к левой стороне. Я знаю, что я могу удалить это дополнение с помощью функции вставки разделителя в настройке UITableView в файле xib, но мне нужно сохранить заголовок текста с заполнением. Как это сделать?
по умолчанию:
![enter image description here]()
с настройкой на вставке разделителя на 0:
![enter image description here]()
Мне нужно сохранить разделители, как показано на рисунке 2, но заголовок с "2013" как картинка 1.
Ответы
Ответ 1
для Seperator вы можете установить его через Storyboard
а для заголовка создайте собственный заголовок, подобный этому
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *viewHeader = [UIView.alloc initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 28)];
UILabel *lblTitle = [UILabel.alloc initWithFrame:CGRectMake(6, 3, 136, 21)];
[lblTitle setFont:[UIFont fontWithName:@"HelveticaNeue" size:13]];
[lblTitle setTextColor:[UIColor blackColor]];
[lblTitle setTextAlignment:NSTextAlignmentLeft];
[lblTitle setBackgroundColor:[UIColor clearColor]];
[viewHeader addSubview:lblTitle];
return viewHeader;
}
придайте ему определенную высоту. и дать ему любой текст.
сделайте массив для заголовков разделов, которые будут содержать ваши годы.
Ответ 2
ИСПОЛЬЗОВАНИЕ SWIFT и STORYBOARD
В раскадровке вы можете установить разные вставки разделителя для TableView (заголовок) и для ячеек (разделителей).
Установите для разделителя в ячейку значение 0, выбрав ячейку в раскадровке и установив следующее:
![введите описание изображения здесь]()
Затем установите разделительную вставку для TableView (для заголовка) на 15, выбрав TableView в Storyboard и установив следующее:
![введите описание изображения здесь]()
ДОПОЛНИТЕЛЬНО:
Вам также может потребоваться установить поля на ячейках нулевым программным образом, чтобы гарантировать, что разделитель проходит весь путь слева направо. Используйте этот код, если необходимо, в сводном файле контроллера табличного представления:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("YOURCELL", forIndexPath: indexPath) as! UITableViewCell
// THIS IS THE IMPORTANT PART...
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
return cell
}
Ответ 3
Возможно, вы не захотите создать собственное представление заголовка всегда, потому что иногда его избыток, или ему потребуется пробная версия и ошибка, чтобы сделать его точно таким же, как и заголовок раздела по умолчанию. Вместо этого есть простой хак, который не нуждается в возврате настраиваемого заголовка. Просто установите для этого отступа разделителя значение 0 и поместите некоторое количество пробелов в строку заголовка.
![enter image description here]()
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return @" Your Title";
}
Ответ 4
UITableView
имеет метод делегата с именем viewForHeaderInSection
. Если вы удалите дополнение, а затем в методе делегата добавьте дополнение и верните представление заголовка раздела.
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), 30)];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(15, 5, 200, 25)];
// 15 pixel padding will come from CGRectMake(15, 5, 200, 25).
label.text = @"2013";
[view addSubview: label];
return view;
}
Вы можете спроектировать представление заголовка, как вам нравится. Для установки высоты заголовка tableView используйте:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
Надеюсь, это поможет вам...)
Ответ 5
Вы можете установить вставки в таблицу (и верхний/нижний колонтитул) и в самой ячейке:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsMake(0, 10, 0, 0)];
}
if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[tableView setLayoutMargins:UIEdgeInsetsMake(0, 10, 0, 0)];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Ответ 6
Если вы хотите отделить текст раздела от левого поля, вот простой способ, которым я это сделал. В функции, см. Пробел после первой метки кавычки? Просто поставьте столько пробелов, сколько вам нужно до начала текста.
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let title: UILabel = UILabel()
title.text = " \(sortedSections[section])"
title.textAlignment = NSTextAlignment.Left
return title
}
Ответ 7
в вашем методе cellForRowAtIndeaPath добавьте представление в ячейку, например
UIView* view = [[UIView alloc] initWithFrame:CGrectmake(cell.frame.ori.x, cell.frame.ori.y, 20.0, cell.height)];
view.backgroundColor = desired color
[cell.containView addSubView: view];
добавьте это в свой первый код ячейки, и вы закончили