got a UITableViewStyleGroupedand UITableViewStylePlain by changes in storyboard, found that, top edge of plain table view sticks to navigation bar, while top gap in grouped style somehow because of header view.

But, as picture show, gap "a" is bigger than "b", why? Are there any hidden elements around "a"? How to manage this gap so that it could be also stuck with bar?
What's the default size of gap "a" and "b"? How to make "a" equal to "b", like "setting"

below are my try-out
tried set heightForHeaderInSection: and viewForHeaderInSection: like below
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 0.0f;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView * header = [[UIView alloc] init];
header.backgroundColor = [UIColor redColor];
[self.view addSubview:header];
return header;
}

tried heightForFooterInSection: and viewForFooterInSection:, like below
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.0f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView * footer = [[UIView alloc] init];
footer.backgroundColor = [UIColor yellowColor];
[self.view addSubview:footer];
return footer;
}

It looks neither of them work as expected, gap "a" is always there and not changed.
The weird is, height of header and footer is still there, looks a minium height,