如何在UITableView和导航栏之间更改高度

时间:2013-09-24 20:17:04

标签: ios objective-c uitableview uinavigationbar ios7

通过故事板中的更改得到UITableViewStyleGroupedUITableViewStylePlain,发现普通表视图的上边缘粘在导航栏上,而由于标题视图,以某种方式分组样式的顶部间隙。

enter image description here

但是,如图所示,差距“a”大于“b”,为什么? “a”周围是否有任何隐藏元素?如何管理这个差距,以便它也可以卡住吧?

差距“a”和“b”的默认大小是多少?如何使“a”等于“b”,如“设置”

enter image description here

下面的

是我的试用


尝试设置heightForHeaderInSection:viewForHeaderInSection:,如下所示

- (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;
}

enter image description here


尝试了heightForFooterInSection:viewForFooterInSection:,如下所示

- (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;
}

enter image description here


看起来它们都没有像预期的那样工作,差距“a”总是存在而且没有改变。

奇怪的是,页眉和页脚的高度仍然存在,看起来是一个最小高度,

即使将高度设置为零。

7 个答案:

答案 0 :(得分:1)

不确定为什么您的问题正在发生,但是要获得分组的tableview"卡住"在导航栏的底部:

CGFloat myInset = *HEIGHT OF GAP A*
self.tableView.contentInset = UIEdgeInsetsMake(-myInset, 0, 0, 0);

答案 1 :(得分:1)

只需在ViewDidLoad方法中添加此代码:

self.automaticallyAdjustsScrollViewInsets = NO;

答案 2 :(得分:0)

我希望它可以帮到你。我想你需要改变页脚高度。

实现那些UITableView-delegate方法:

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

    return 50.0f;
}

或此委托方法

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

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

答案 3 :(得分:0)

这是我在第一个测试版中打开的错误。它同时使用这个选项:

if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
        if([UIScreen mainScreen].bounds.size.height == 568.0) {
            //iphone5
            sectionsTableView.frame = CGRectMake(0, 0, 320, 568);
        }
        else {
            //iphone4s
            sectionsTableView.frame = CGRectMake(0, 0, 320, 480);
        }
    }

Bugreport问题#14310190

答案 4 :(得分:0)

在每个部分之前,您有一个标题。在每个部分之后,您有一个页脚。你标记为“a”的是第0部分的标题。你标记为“b”的是第0部分的页脚和第1部分的标题的组合。

因此,要获得与“设置”应用相同的外观,您需要以下代码:

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

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

请注意,返回0将不起作用。它似乎具有表视图恢复到某个默认空标题或节的效果。

答案 5 :(得分:0)

对于那些仍然感兴趣的人来说,表视图顶部有空格的原因是因为这是TableView的默认标题。要获得它,只需将其添加到tableViewController

即可
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.0f)];

这将在视图控制器的顶部绘制它。您可以将0.0的值更改为您想要的任何值。

答案 6 :(得分:0)

在表格视图的heightForFooterInSection API中返回最小值(不是0)(比如0.1)。这将从黄色和红色显示的部分底部删除默认空间(大约10 px)。