Как центрировать заголовки разделов UITableView - PullRequest
32 голосов
/ 02 февраля 2011

Я хочу центрировать заголовок на табличном представлении, однако у меня есть 2 проблемы. Во-первых, у меня нет правильной высоты, а во-вторых, UILabel не похож на заголовок по умолчанию - шрифт / размер шрифта / цвет и т. Д. Есть ли лучший способ центрировать его и / или есть способ это похоже на заголовок по умолчанию.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) section
{
    //section text as a label
    UILabel *lbl = [[UILabel alloc] init];
    lbl.textAlignment = UITextAlignmentCenter;  

    lbl.text = @"Header";
    [lbl setBackgroundColor:[UIColor clearColor]];  

    return lbl;
}

Ответы [ 9 ]

26 голосов
/ 11 января 2015

это должно решить вашу проблему. Протестировано в xcode 6 / ios8

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    [[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextAlignment:NSTextAlignmentCenter];
    return [sectionTitles objectAtIndex:section];
}
25 голосов
/ 02 февраля 2011

Вы также должны реализовать tableView: heightForHeaderInSection, чтобы настроить высоту вашего заголовка:

В Справочном документе по протоколу UITableViewDelegate вы найдете:

tableView: viewForHeaderInSection:

Обсуждение

Например, возвращаемый объект может быть объектом UILabel или UIImageView.Табличное представление автоматически регулирует высоту заголовка секции, чтобы приспособить возвращенный объект представления. Этот метод работает правильно только в том случае, если tableView: heightForHeaderInSection: также реализован.

Для центрирования метки заголовка необходимо указать рамку метки перед тем, как установить ее выравнивание по центру.Для получения стандартного шрифта используйте SystemFontOfSize:

Также остерегайтесь вы создаете утечку памяти вы должны вернуть автоматически выпущенное представление

Попробуйте что-то вроде этого:

UILabel *lbl = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)] autorelease];
lbl.textAlignment = UITextAlignmentCenter;
lbl.font = [UIFont systemFontOfSize:12];

Надеюсь, это поможет, Винсент

19 голосов
/ 17 июня 2015

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

Просто внедрите

- tableView: willDisplayHeaderView: forSection:

и установите свойство textAligment метки:

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if([view isKindOfClass:[UITableViewHeaderFooterView class]]){

        UITableViewHeaderFooterView *tableViewHeaderFooterView = (UITableViewHeaderFooterView *) view;
        tableViewHeaderFooterView.textLabel.textAlignment = NSTextAlignmentCenter;
    }
}
15 голосов
/ 02 ноября 2015

Ответ Фолькера в Swift:

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

Просто внедрите

- tableView:willDisplayHeaderView:forSection:

и установите свойство textAligment метки:

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.textLabel?.textAlignment = .Center
    }
}
5 голосов
/ 17 октября 2016

Чтобы этот метод вызывался, вы должны сначала реализовать

titleForHeaderInSection

тогда будет вызываться tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) метод

Быстрое решение:

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {


        headerView.textLabel?.textAlignment = Localize().isRTL ? .Right : .Left
        headerView.textLabel?.text = partsDataSource[section]
        headerView.textLabel?.textColor = UIColor ( red: 0.0902, green: 0.2745, blue: 0.2745, alpha: 1.0 )
        headerView.textLabel?.font = UIFont(name: UIDecorator.sharedInstance.PRIMARY_FONT, size: 14.0)
        headerView.contentView.backgroundColor = UIDecorator.sharedInstance.currentTheme.lightShadeColor
    }
}

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return " "
}
5 голосов
/ 06 мая 2011

Вот моя версия, вам нужно сделать снимок экрана обычного фона заголовка, сохранить его фрагмент шириной в 1px как «my_head_bg.png» и добавить его в проект.Таким образом, это будет выглядеть совершенно нормально:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UILabel *lbl = [[[UILabel alloc] init] autorelease];
    lbl.textAlignment = UITextAlignmentCenter;
    lbl.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
    lbl.text = @"My Centered Header";
    lbl.textColor = [UIColor whiteColor];
    lbl.shadowColor = [UIColor grayColor];
    lbl.shadowOffset = CGSizeMake(0,1);
    lbl.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"my_head_bg"]];
    lbl.alpha = 0.9;
    return lbl;
}
1 голос
/ 02 февраля 2011

Попробуйте это

    UILabel *tableHeader = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 30)];
[tableHeader setText:@"This is header"];
[tableHeader setTextAlignment:UITextAlignmentCenter];

UITableView *newTable = [[UITableView alloc] initWithFrame:CGRectMake(20, 0, 280, 200) style:UITableViewStylePlain];
[newTable setBackgroundColor:[UIColor clearColor]];
[newTable setTableHeaderView:tableHeader];
self.view = newTable;
0 голосов
/ 07 августа 2017

В Хамарине:

        // Center Header
        public override void WillDisplayHeaderView(UITableView tableView, UIView headerView, nint section)
        {
            if (headerView.GetType() == typeof(UITableViewHeaderFooterView))
            {
                UITableViewHeaderFooterView tableViewHeaderFooterView = (UITableViewHeaderFooterView)headerView;
                tableViewHeaderFooterView.TextLabel.TextAlignment = UITextAlignment.Center;
            }
        }
0 голосов
/ 02 февраля 2011

Чтобы изменить высоту, используйте этот метод:

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

    return 15;
}

Я не совсем уверен насчет заголовка по умолчанию - это должно быть намного проще, чем есть.Возможно, у кого-то есть хорошее фоновое изображение, которое вы можете использовать с белым шрифтом.Но для центрирования, попробуйте это:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,320,15)];
label.textAlignment = UITextAlignmentCenter

label.text = @"Text Should Be Centered";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...