Разделение между заголовком и первой ячейкой & mdash; В простом UITableView

Если вы хотите как можно ближе подойти к синтаксису выражения, попробуйте функцию range из bash-трюков range.bash .

Для Например, все следующие будут делать то же самое, что и echo {1..10}:

source range.bash
one=1
ten=10

range {$one..$ten}
range $one $ten
range {1..$ten}
range {1..10}

Он пытается поддерживать собственный синтаксис bash с максимально возможным количеством «gotchas»: поддерживаются не только переменные, но часто нежелательное поведение недопустимых диапазонов, предоставляемых как строки (например, for i in {1..a}; do echo $i; done), также предотвращается.

Другие ответы будут работать в большинстве случаев, но все они имеют по крайней мере одно из следующих Недостатки:

  • Многие из них используют подоболочки , что может снизить производительность и , возможно, невозможно на некоторых систем.
  • Многие из них полагаются на внешние программы. Даже seq представляет собой двоичный файл, который должен быть установлен для использования, должен быть загружен bash и должен содержать ожидаемую программу, чтобы он работал в этом случае.
  • Решения, которые используют только собственные функции Bash, такие как @ ephemient, не будут работать в алфавитном диапазоне, например {a..z}; расширение скобки будет. Вопрос был о диапазонах номеров , хотя это так.
  • Большинство из них не визуально похожи на синтаксис диапазона расширенного набора {1..10}, поэтому программы, которые используют оба варианта, могут быть немного труднее читать.
  • @ Ответ bobbogo использует некоторый знакомый синтаксис, но делает что-то неожиданное, если переменная $END не является допустимым диапазоном «bookend» для другая сторона диапазона. Если END=a, например, ошибка не будет выполнена, и будет передано дословное значение {1..a}. Это также поведение Bash по умолчанию - это просто неожиданно.

Отказ от ответственности: я являюсь автором связанного кода.

29
задан Astoria 14 September 2015 в 16:12
поделиться

6 ответов

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

32
ответ дан Jeremy Fuller 14 September 2015 в 16:12
поделиться

Я расширил UITableViewCell с помощью нескольких методов-разделителей (в Swift). С их помощью я могу добавить разделители к заголовкам или удалить их из обычных ячеек. Я надеюсь, что это может помочь некоторым людям.

public extension UITableViewCell
{
    func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor)
    {
        let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7);
        let seperatorView = UIView(frame: sepFrame);
        seperatorView.backgroundColor = color;
        self.addSubview(seperatorView);
    }

    public func addTopSeparator(tableView: UITableView)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(0, margin: margin, color: tableView.separatorColor!);
    }

    public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat)
    {
        let margin = tableView.separatorInset.left;

        self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!);
    }

    public func removeSeparator(width: CGFloat)
    {
        self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0);
    }

}
2
ответ дан Jorg B Jorge 14 September 2015 в 16:12
поделиться

Добавьте дополнительную «скрытую» строку в раздел, в который вы хотите добавить разделитель, возвращая +1 существующее количество строк в tableView:numberOfRowsInSection:. Затем добавьте следующий метод:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if ( indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow )
        return 0.f;
    else
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}

Если вы хотите разделитель в верхней части раздела (после заголовка), indexOfHiddenRow будет 0. Если вы хотите, чтобы это было внизу раздела (перед нижним колонтитулом), это будет [self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1.

Теперь внутри tableView:cellForRowAtIndexPath: просто верните [UITableViewCell new] для скрытой строки (она не будет отображаться, поэтому нет необходимости устанавливать рамку или что-либо еще). Возможно, вам потребуется выполнить некоторые -1 корректировки индекса в ваших методах UITableViewDataSource и UITableViewDelegate, но это работает (протестировано в iOS 7), и гарантирует согласованное оформление (не нужно рисовать свой собственный » фальшивый разделитель - это настоящий системный разделитель UITableView.

5
ответ дан devios1 14 September 2015 в 16:12
поделиться

Как отмечает Джереми в своем ответе, iOS не добавляет разделители выше / ниже верхних / нижних колонтитулов; Вы можете просто использовать UIView, чтобы создать линию самостоятельно.

Вот код для добавления стандартного вида разделителя к представлению заголовка:

CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1);
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease];
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0];
[headerView addSubview:seperatorView];

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

41
ответ дан JosephH 14 September 2015 в 16:12
поделиться

Добавьте разделитель между представлением заголовка и первой строкой: - В представлении для заголовка в методе делегата раздела добавьте подпредставление self.separator // @ property (nonatomic, strong) UIImageView * separator;

- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {

return 41; 
}


- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {

self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;

}
1
ответ дан YaBoiSandeep 14 September 2015 в 16:12
поделиться

Если вы хотите оставить пробел только между заголовком таблицы и первой строкой таблицы, вы можете использовать

В методе tableView:heightForHeaderInSection:(NSInteger)section

if(section ==0)
    return 3; // (space u want to give between header and first row);

return 10; //(ur section header height)

В методе tableView:viewForHeaderInSection:(NSInteger)section

  UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];
  headerView.backgroundColor = [UIColor clearColor];   // use your own design

  return headerView;
11
ответ дан BBog 14 September 2015 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: