分组 UITableView 35 点/像素顶部插入/填充

Posted

技术标签:

【中文标题】分组 UITableView 35 点/像素顶部插入/填充【英文标题】:Grouped UITableView 35 point / pixel top inset / padding 【发布时间】:2014-05-14 19:56:11 【问题描述】:

请注意,我将在这个问题中将点称为像素。

我有一个分组 UITableView 有 3 个部分,每个部分都有一个 40 像素高的标题视图。表格视图中的第一个标题似乎被系统赋予了 35 像素的 y 位置。

我尝试过使用 automaticallyAdjustsScrollViewInsets 和其他一些 ios 7 自动部件,但无济于事。

为什么我的UITableView 内容被插入了 35 个像素?

编辑:我已经看到this answer 和许多其他线程。我有有效的标题和标题高度。此外,将默认值设置为 FLT_MIN、0.01f、1.0f 或 100.0f 并不能解决问题。

这是我的头文件实现:

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

    UIView *header = (self.headerViews.count > section ? self.headerViews[section] : nil);
    return (header.viewHeight ? : FLT_MIN);


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

    UIView *header = (self.headerViews.count > section ? self.headerViews[section] : nil);
    return (header.viewHeight ? header : nil);

我也在设置:

- (BOOL)automaticallyAdjustsScrollViewInsetsreturn NO;

[self setSectionHeaderHeight:FLT_MIN];

【问题讨论】:

为什么将点称为像素?如果你的意思是“点”,就说“点”。这种区别是有原因的。 你看过这个question吗? @Michael 因为像素被更广泛地理解和搜索。 hmm,不了解区别的人无论如何都不应该尝试回答这个问题,恕我直言 你是否也使用了 heightForHeaderInSection 来设置合适的标题高度? 【参考方案1】:

好像是这样的:

[self setTableHeaderView:[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, width, FLT_MIN)]];

在 init 中,selfUITableView,将去掉前 35 个点。

【讨论】:

我可以看到这是如何工作的,而其他人都没有。同样,您的案例特定于VC 内的UITableView,因此涉及contentInsetautomaticallyAdjustsScrollViewInsets 的所有其他解决方案都不起作用,因为当问题在UITableViewController 内部时,它们将针对VC本身。 这是黄金。并不是表的部分标题视图之间存在差异,这不是。这是一个表头。出于某种原因,在 Interface Builder 中经过大量摆弄后,我的一张表将其设置为非零值,我猜是一些 IB 错误。我希望我早点看到这个。谢谢。【参考方案2】:

是的,当我设置 tableview.tableFooterView 和自定义设置部分标题高度时,我遇到了这个问题,然后第一个部分高度超过 35 点。

然后我添加一个

tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNormalMagnitude))

为我工作。

【讨论】:

【参考方案3】:

有多种方法可以解决您遇到的同一问题,因此有多种解决方案。我将尝试列出我所知道的及其相应的解决方案。大部分都是从this question复制过来的。

UIViewController 中的 UITableView

这是一个常见的问题,因为他们认为问题与他们的UITableView 有关,而大多数情况下实际上是父母UIViewController

如果您的VC 嵌入NavigationController 上。如here 所述,您将获得 35 分 y 偏移

解决方案

在 Xcode 版本 > 5 中 VC 上取消勾选 Attributes Inspector 下的 Extended Edges "Under Top Bars 以移除顶部 UITableView 内容插图。

约束:您的VC 有一个主视图,其中放置了所有其他子视图,包括您的UITableView。您需要确保您的UITableView 中的所有约束明确设置且满足/无歧义

设置self.navigationController.navigationBar.translucent = YES;

设置self.automaticallyAdjustsScrollViewInsets = NO;。也可以通过取消选中视图控制器布局的 Adjust Scroll View Insets 复选框在情节提要上设置此选项。

设置self.edgesForExtendedLayout = UIRectEdgeNone;


通用 UITableView/UITableViewController

设置tableView.separatorInset = UIEdgeInsetsZero;

设置tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);注意-35。负数偏移视图。

声明这个方法(也可以用于FooterSection):

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
    return CGFLOAT_MIN;

【讨论】:

我需要将标题的高度设置为40.0f,我也不需要插入-20。另外,我没有使用 XIB 或自动布局。至于其余的,这已经全部设置好了,但我仍然有一个35.0f 点插图。但是,这是对其他答案中所有信息的良好融合。 是的,这里复制时我没有更新-20 偏移量。

以上是关于分组 UITableView 35 点/像素顶部插入/填充的主要内容,如果未能解决你的问题,请参考以下文章

分组 UITableView 中第一个和第二个单元格之间的 1 个像素间隙

有没有办法不显示分组 UITableView 中每个部分的顶部和底部单元格的圆角?

分组UITableView,多个部分在iPhone SDK中创建问题

如何在 UITableView 顶部添加一个一起滚动的视图,但在滚动后粘在顶部

删除分组 uitableview 中单元格前的空格

当 scrollViewDidEndDragging 时 UITableView 滚动到特定点