分组 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 中,self
是 UITableView
,将去掉前 35 个点。
【讨论】:
我可以看到这是如何工作的,而其他人都没有。同样,您的案例特定于VC
内的UITableView
,因此涉及contentInset
或automaticallyAdjustsScrollViewInsets
的所有其他解决方案都不起作用,因为当问题在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中创建问题