Как воссоздать UIView по умолчанию так же, как и tableView по умолчанию: viewForHeaderInSection :? - PullRequest
7 голосов
/ 24 мая 2010

Я попытался реализовать

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

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

Как воссоздать UIView точно так же, как в SDK?

Из документации Apple:

Обсуждение
В табличном представлении используется фиксированный стиль шрифта для заголовков разделов.Если вы хотите использовать другой стиль шрифта, вместо этого верните пользовательское представление (например, объект UILabel) в метод делегата tableView: viewForHeaderInSection:.

Ответы [ 4 ]

13 голосов
/ 18 июня 2010

Хотя это не совсем верно, я публикую это в надежде, что кто-то может улучшить мой подход. Текст правильный (белый, как по умолчанию, но вы можете изменить это). Градиент фона и непрозрачность не идеальны (слишком светлые ??) - здесь может потребоваться некоторая настройка.

Получите sectionheaderbackground.png здесь: http://img5.imageshack.us/img5/6616/sectionheaderbackground.png

// Create a stretchable image that emulates the default gradient
UIImage *buttonImageNormal = [UIImage imageNamed:@"sectionheaderbackground.png"];
UIImage *stretchableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];

// Create the view for the header
CGRect sectionFrame = CGRectMake(0.0, 0.0, 320.0, 22.0);
UIView *sectionView = [[UIView alloc] initWithFrame:sectionFrame];
sectionView.alpha = 0.9;
sectionView.backgroundColor = [UIColor colorWithPatternImage:stretchableButtonImageNormal];

// Create the label
CGRect labelFrame = CGRectMake(10.0, 0.0, 310.0, 22.0);
UILabel *sectionLabel = [[UILabel alloc] initWithFrame:labelFrame];
sectionLabel.text = @"Test section label";
sectionLabel.font = [UIFont boldSystemFontOfSize:18.0];
sectionLabel.textColor = [UIColor whiteColor];
sectionLabel.shadowColor = [UIColor grayColor];
sectionLabel.shadowOffset = CGSizeMake(0, 1);
sectionLabel.backgroundColor = [UIColor clearColor];
[sectionView addSubview:sectionLabel];
[sectionLabel release];

// Return the header section view
return sectionView;
1 голос
/ 10 января 2011

Вы можете получить заголовки разделов UITableView по умолчанию, реализовав следующие методы в своем классе табличного представления:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{   
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 22; //returning 0 hides section headers
}

Это может быть особенно полезно, если вы используете в своем приложении UISearchDisplayController, в котором вы хотите, чтобы результаты поиска отображались простым UITableViewStylePlain способом вместо, скажем, UITableViewStyleGrouped вашего настроенного основного вида таблицы. Затем вы можете реализовать что-то вроде этого:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{   
    if ([self.searchDisplayController.searchBar isFirstResponder]) return nil;
    //create and return your custom UIView here
}
0 голосов
/ 07 марта 2013

Если вы хотите воссоздать по умолчанию / standard heightForHeaderInSection , используйте это:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 44;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 44)];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 11, tableView.frame.size.width-100, 21)];

    label.text = @"Text";
    label.textColor = [UIColor colorWithRed:76.0/255 green:86.0/255 blue:108.0/255 alpha:1];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.0];

    [view addSubview:label];

    return view;
}
0 голосов
/ 24 мая 2010

Вы можете попробовать имитировать его, используя shadowColor и shadowOffset.

Я сделал это черным, например, используя код, подобный следующему:

label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake(1, 1);

Смешивая цвета и комбинации теней, вы можете очень хорошо имитировать этикетку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...