Як змінити висоту згрупованого заголовка UITableView?


88

Я знаю, як змінити висоту заголовків розділів у поданні таблиці. Але я не можу знайти жодного рішення для зміни інтервалу за замовчуванням до першого розділу.

Зараз у мене є такий код:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    if (section == 0){
        return 0;
    }
    return 10;
}

введіть тут опис зображення


1
stackoverflow.com/questions/5441938/… Дивіться це посилання ...
Jitendra

@JitendraDeore Дякую, що скерував мене у правильному напрямку
circuitlego

Відповіді:


219

Поверніть CGFLOAT_MINзамість 0 бажану висоту секції.

Повернення 0 призводить до того, що UITableView використовує значення за замовчуванням. Це недокументована поведінка. Якщо ви повернете дуже маленьке число, ви фактично отримаєте заголовок нульової висоти.

Свіфт 3:

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return CGFloat.leastNormalMagnitude
        }
        return tableView.sectionHeaderHeight
    }

Стрімкий:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj-C:

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return CGFLOAT_MIN;
    return tableView.sectionHeaderHeight;
}

8
У Swift "CGFLOAT_MIN" недоступний: використовуйте замість цього CGFloat.min.
tounaobun

4
CGFloat.min спричинив збій, оскільки CGFloat.min повертає від'ємне значення, наприклад -0,0000000000001
Павло

2
Можливо, це педантизм, але CGFloat.min - це не дуже маленьке число, це дуже велике від'ємне число. Якби ви хотіли дуже малу кількість, ви б використовували епсилон.
alex bird

6
У Swift 3 цеCGFloat.leastNormalMagnitude
ixany

1
Порадьте: Не використовуйте це значення estimatedHeightForHeaderInSection, програма вийде з ладу.
Педро Паулу Аморім

27

Якщо ви використовуєте згрупованіtableView стилі , автоматично встановлюйте верхні та нижні вставки. Щоб уникнути їх та уникнути встановлення внутрішніх вставок, використовуйте методи делегування для верхнього та нижнього колонтитула. Ніколи не повертайте 0,0, але .tableViewCGFLOAT_MIN

Завдання-C

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

Стрімкий

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

Мені також довелося повернути нуль, щоб viewForHeaderInSectionзаголовок повністю зник.
Домінік Сімайр,

19

Здається, я не можу встановити подання заголовка таблиці висотою 0. Я в підсумку зробив наступне:

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

Для цього було б краще встановити висоту тут:- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

Це працювало у мене з Swift 4 . Змініть, UITableViewнаприклад viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))

1
Спаситель, дякую, що
знайшли

13

Ви можете спробувати це:

В loadView

_tableView.sectionHeaderHeight = 0;

Тоді

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

Його слід видалити, якщо у вас немає заголовків ...

А якщо ви хочете отримати певний розмір заголовка розділу, змініть лише значення, що повертається.

те саме, якщо ви не видалите нижній колонтитул розділу.

_tableView.sectionFooterHeight = 0;

і

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0;
}

Ну, це працює для моїх проблем з табличним переглядом в iOS7.


3

Ви повинні видалити код self.tableView.tableHeaderView = [UIView new];після додавання

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return CGFLOAT_MIN;
}

Саме footerвисота є причиною проблеми в моєму випадку. Дякую за допомогу.
pkc456

2

Ви можете використовувати viewForHeaderInSectionі повертати вид з будь-якою висотою.

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

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}

Я питаю не про заголовки розділів, а про заголовки таблиці.
circuitlego

тоді ви можете безпосередньо передати A uiview до подання заголовка таблиці.
Divyam shukla

2

У швидкій версії 2.0

func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {

        return yourHeight
    }

2

У Swift 4

Видаліть зайвий верхній відступ у згрупованому табличному поданні

Тут висота дається 1 як мінімальна висота для заголовка розділу, тому що ви не можете вказати 0, оскільки viewview буде мати верхнє поле за замовчуванням, якщо йому присвоєно нульову висоту.

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 1
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return UIView()
}

0

Приклад viewForHeaderInSection:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

return view;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.