Objective c 分组的UITableView在底部有20像素的额外填充
在iOS 6中,分组表视图的底部似乎有额外的填充(iOS 5没有),但我找不到任何文档表明这是正确的/预期的行为 这也会影响示例项目,例如Objective c 分组的UITableView在底部有20像素的额外填充,objective-c,ios,uitableview,Objective C,Ios,Uitableview,在iOS 6中,分组表视图的底部似乎有额外的填充(iOS 5没有),但我找不到任何文档表明这是正确的/预期的行为 这也会影响示例项目,例如TableViewSuite示例中的SimpleTableView项目。我想我必须将AppDelegate中的样式更改为“分组”,并将SDK更新为iOS 6,但没有对项目进行其他更改 调查显示,有10px保留用于页眉和页脚视图,还有一些20px无法解释。 没有实际的页眉或页脚视图(tableHeaderView和tableFooterView是nil,实现并返
TableViewSuite
示例中的SimpleTableView
项目。我想我必须将AppDelegate
中的样式更改为“分组”,并将SDK更新为iOS 6,但没有对项目进行其他更改
调查显示,有10px
保留用于页眉和页脚视图,还有一些20px
无法解释。
没有实际的页眉或页脚视图(tableHeaderView
和tableFooterView
是nil
,实现并返回nil
,例如viewforfooterInstitution
不执行任何操作)。
我在tableView本身上找不到任何“20”值,尽管我可能错过了一些东西
为页脚添加一个零大小的视图没有任何作用,但是添加一个1px
square视图会导致额外的填充消失。e、 g:
tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0,0,1,1)];
它仍然占据高度的1px,因此底部填充物现在是11px,但这远不如20明显。现在将sectionFooterHeight
设置为0只会导致底部空间1px
我的问题是:什么?我如何才能完全移除它?这不是什么关键任务,但它是非常奇怪的,不受欢迎的,据我所知,它是未记录的
请注意-这是苹果开发者论坛上的问题副本。但是我有完全相同的问题,我也不知道如何解决它。以下代码适合我
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 0;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0;
}
使用
UIScrollView
的反弹属性:
[yourTableView setBounces:NO];
这将删除UITableView
顶部和底部的额外填充。
实际上,它只会禁用tableview的scrollview以滚动内容的边缘。您可以使用contentInset
来补偿20px的额外底部边距:
tableView.contentInset = UIEdgeInsetsMake(0, 0, -20, 0);
这对我来说很有用。@frankWhite'解决方案效果很好,但这里有一个更好的解决方案,可以避免键入0.1、0.001或其他内容,从而减少歧义
// Swift version
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
// remove bottom extra 20px space.
return CGFloat.min
}
我想这是唯一可行的解决方案。我尝试将tableFooterView
和tableHeaderView
设置为nil
。
但是什么也没发生。然后下面的解决方案起作用了。返回0“返回0;”没有效果。我们应该返回可能的最低高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return CGFLOAT_MIN;
}
注意:
这是我打印值时得到的
CGFLOAT_MAX=3402823463852885981170418348484516925440.000000
CGFLOAT_最小值=0.000000
斯威夫特3
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return CGFloat.leastNormalMagnitude
}
Swift 3代码
class PaddingLessTableView : UITableView
{
override func layoutSubviews() {
self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
super.layoutSubviews()
}
}
这就解决了问题:
Obj-c
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 0.1;
}
Swift:
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.1
}
在Swift 4.2中,您可以尝试将表格标题设置为最小正常震级高度-
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tableView.tableHeaderView = UIView(frame: frame)
最近,我发现了这个问题,并遵循上面发布的解决方案,但它们都不起作用。在我的例子中,我有一个具有动态高度的节标题。受上述解决方案的启发,我编写了以下代码,并解决了问题。我希望这能有所帮助
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.1
}
并按如下方式配置tableView的页眉和页脚:
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
Swift 5
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: .leastNormalMagnitude))
在此处发现相同的问题:(如果您仍在使用,您应该将答案授予Frank White,因为他的解决方案在iOS8.3中非常有效。将页脚值设置为零没有任何效果。感谢您的回答。但它对我不起作用。我需要替换的不是节页脚,而是表页脚。唯一有帮助的是tableView.tableFooterView=[[UIView alloc]initWithFrame:CGRectMake(0,0,1,1)];但它将填充减少到1px,而不是完全删除它。我在登录和密码的分组tableview中遇到了类似的问题。但使用此方法解决了。您是否尝试过tableview.tableFooterView=nil;
是的,我尝试将tableFooterView设置为nil,但它对我不起作用。看起来编译器忽略了它。我有许多节,因此无法使用y我们的代码。但如果我只是创建一个只有一个分组的tableview的清晰项目,它的工作方式与在底部添加额外填充广告的方式相同。甚至设置应用程序也有相同的填充。将tableFooterView设置为零对我有效!谢谢!在你的答案中加入这个选项,我会给它加1对我有效。但这听起来很武断。我为什么要获得空间n从ios5.0开始,我的分组表排名第一?@Gmu我不知道。苹果总是随意调整UIKit以适应自己的需要,这常常让我们第三方开发者摸不着头脑:(iOS 7在这方面更糟糕。太棒了!将其设置为0没有任何效果。我甚至使用了0.0001。我正在为iOS 8.3使用Xcode 6.3,所以这是最新版本的Xcode。我建议使用@BensonTommy的答案,因为它不那么模棱两可。非常感谢你!可怜、悲伤的UITableView有多么糟糕的API。是时候从头重写了。但希望没有UICollectionViewController过于冗长!在@frankWhite的答案上做得很好,使其不那么模棱两可。为了使其正常工作,请使用以下func原型:func tableView(tableView:UITableView,HeightForFooterInstruction部分:Int)->CGFloat
祝福你的灵魂返回CGFloat。在swift 3.0和更高版本中,至少正常的大小
,我还必须实现viewForFooterInstitution
返回nil
以使其在iOS 11中工作,这是设置tableFooterView的一个很好的调用,很奇怪,但它可以工作。我已经有了tableView(\u:viewForHeaderInSection:)实现了,所以我尝试添加heightForFooter和viewForFooter部分,如这里所述,就像其他答案一样,这些都没有为我解决问题,但是创建一个虚拟的TableFooter视图起到了作用。
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 0.1))
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: .leastNormalMagnitude))