Сохранять UITableView в заголовке, но нет в разделителе на IOS7

18

с переходом на iOS7 разделитель имеет 15px дополнение к левой стороне. Я знаю, что я могу удалить это дополнение с помощью функции вставки разделителя в настройке UITableView в файле xib, но мне нужно сохранить заголовок текста с заполнением. Как это сделать?

по умолчанию:

с настройкой на вставке разделителя на 0:

Мне нужно сохранить разделители, как показано на рисунке 2, но заголовок с «2013» как картинка 1.

    
задан Alessio Crestani 09.01.2014 в 11:04
источник

7 ответов

14

для 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;
}

придайте ему определенную высоту. и дать ему любой текст. сделайте массив для заголовков разделов, которые будут содержать ваши годы.

    
ответ дан Xeieshan 09.01.2014 в 11:43
источник
26

ИСПОЛЬЗОВАНИЕ 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

}
    
ответ дан Neiman Aleksei 27.03.2016 в 11:02
источник
3

Возможно, вы не захотите создать собственное представление заголовка всегда, потому что иногда его избыток, или ему потребуется пробная версия и ошибка, чтобы сделать его точно таким же, как и заголовок раздела по умолчанию. Вместо этого есть простой хак, который не нуждается в возврате настраиваемого заголовка. Просто установите для этого отступа разделителя значение 0 и поместите некоторое количество пробелов в строку заголовка.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return @"    Your Title";
}
    
ответ дан rushafi 20.08.2014 в 11:38
источник
2

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;

Надеюсь, это поможет вам ...)

    
ответ дан Rashad 09.01.2014 в 11:26
источник
1

Вы можете установить вставки в таблицу (и верхний / нижний колонтитул) и в самой ячейке:

-(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];
    }
}
    
ответ дан mike.tihonchik 13.04.2016 в 15:31
источник
1

Если вы хотите отделить текст раздела от левого поля, вот простой способ, которым я это сделал. В функции, см. Пробел после первой метки кавычки? Просто поставьте столько пробелов, сколько вам нужно до начала текста.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let title: UILabel = UILabel()

        title.text = " \(sortedSections[section])"
        title.textAlignment = NSTextAlignment.Left

        return title
    }
    
ответ дан D. Rothschild 04.09.2016 в 00:01
источник
-4

в вашем методе 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];

добавьте это в свой первый код ячейки, и вы закончили

    
ответ дан Retro 09.01.2014 в 11:20
источник