Ios UITableView底部的额外空间

Ios UITableView底部的额外空间,ios,uitableview,storyboard,Ios,Uitableview,Storyboard,我的tableview在底部有一个额外的空间,如图所示: tableView中的所有行的固定高度为71磅 好的,我知道了 “调整滚动视图插入”标记在我的viewController(不是我的tableView)上 下面是一个带有详细解释的示例在我的示例中,这是由于UITableView的底部默认有一个高度为18的页脚。将其设置为1会删除底部的多余空间。我在将UITableView倒置以显示聊天信息屏幕时遇到了这个问题 在我翻转表格视图之前,内容插入在顶部留下了一个空白,这样当我们一直向上滚动时,

我的tableview在底部有一个额外的空间,如图所示:

tableView中的所有行的固定高度为71磅

好的,我知道了

“调整滚动视图插入”标记在我的viewController(不是我的tableView)上


下面是一个带有详细解释的示例

在我的示例中,这是由于UITableView的底部默认有一个高度为18的页脚。将其设置为1会删除底部的多余空间。

我在将UITableView倒置以显示聊天信息屏幕时遇到了这个问题

在我翻转表格视图之前,内容插入在顶部留下了一个空白,这样当我们一直向上滚动时,内容不会被导航栏阻挡。我一翻,插图就被移到了底部


在UITableView的大小检查器中,将“内容插入”更改为“从不”,以在结尾处消除此空间。

这就是通过故事板(iOS 11)轻松修复的方法:


选择Table View>Size Inspector>Content Inserts:Never

在我的情况下tableView是通过编程创建的,我必须设置
tableView.estimatedRowHeight
以使空间消失

如果有嵌入式导航控制器,选中“显示工具栏”将在视图控制器中创建底部间距。只需取消选中它


在这种情况下,您可以将tableview的底部空间0分配给它的superview,我认为它可以工作,或者您也可以这样做

tableView.tableFooterView=UIView()

或者你可以像下面这样做

较低的值应为1.0

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger )section {
    if(section == 0) {
       return 6;
    } else {
       return 1.0;
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger )section {
    return 5.0;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger )section {
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger )section {
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}
@Urgentex做了我想做的大部分事情,但没有完全做到。我也遇到了类似的情况(聊天应用程序的UITableView倒置),但是他们的建议完全禁用了安全区域行为,这在iPhone X等设备上是不可取的,因为这意味着桌面视图将被主页指示器和任何顶部导航栏截取

为了使tableview在倒置时仍能正确避开安全区域,我执行了以下操作:

override func viewDidLoad() {
    super.viewDidLoad()
    self.automaticallyAdjustsScrollViewInsets = false
    self.tableView.contentInsetAdjustmentBehavior = .never
}
然后:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    //fetch the safe area in layoutSubviews since this it's possible that they can change when the device is rotated
    let safeArea = self.tableView.safeAreaInsets
    //insets are **flipped** because the tableview is flipped over its Y-axis!
    self.tableView.contentInset = .init(top: safeArea.bottom, left: 0, bottom: safeArea.top, right: 0)
}

这本质上复制了
contentInsertAdjustmentBehavior=.automatic
行为,但插入的内容在Y轴上翻转。

如果涉及到iOS 11和Xcode 9,则接受的解决方案不再是正确的解决方案。要达到类似效果,您必须转到尺寸检查器,在那里您可以找到:

您可以在代码中实现相同的功能:

if #available(iOS 11.0, *) {
    scrollView.contentInsetAdjustmentBehavior = .never
} else {
    automaticallyAdjustsScrollViewInsets = false
}

我也有同样的问题,最新的Xcode(11.3)和最新的iOS(13.3)iPhone。我尝试了许多答案,但没有一个有效

我的
tableView
具有顶部、底部、前导和尾迹约束,但在最后一个单元格下方的底部有很大的空间。(
tableView.contentSize.height
几乎是所需数据的两倍)
tableView
的数据根本不是动态的。当具有它的视图控制器显示它时,以及当
tableView
隐藏后再次显示时,都会发生这种情况

我使用scrollView的委托方法解决了这个问题,如下所示,这样当用户开始拖动时,高度就会调整。对我来说,它工作得很好,希望你也一样

// this is the best place to adjust the contentSize.height of tableView.
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    print("scrollViewWillBeginDragging():") // optional
    // replace allParkingGeos.count with your data for tableView
    tableView.contentSize.height = CGFloat(allParkingGeos.count) * cellHeight
}

我的问题没有通过答案解决。 我有一个
UISearchbar
作为
tableHeaderView
,这导致了空白(我不知道为什么)。我从序列图像板的tableview中删除了搜索栏,并在
viewWillLayoutSubviews
的表格标题中添加了搜索栏,然后问题得到了解决

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    tableView.tableHeaderView = searchBar
}

当你从那里拉视图时,滚动条似乎在哪里反弹?@Tommy在图片中的同一位置。答案对我很有帮助。谢谢Brian Hong,它工作得很好。但我仍然对这个问题感到好奇。在我的例子中,我有一个从SQLite加载数据的tableview。当没有搜索栏时,它会正常工作,但当我将搜索栏添加为UITableview标题时,就会出现此问题。