底部的UITableView额外空间

时间:2015-02-21 02:10:56

标签: ios uitableview storyboard

我的桌面视图底部有一个额外的空间,如图所示:

tableView中的所有行都具有71pt的固定高度。

enter image description here

11 个答案:

答案 0 :(得分:30)

好的,我明白了。

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

这是一个answer,附有详细说明

答案 1 :(得分:2)

在我的情况下,这是由于UITableView底部默认的页脚高度为18。将其设置为1会删除底部的额外空间。

答案 2 :(得分:1)

当我将UITableView翻转为聊天消息屏幕时,我遇到了这个问题。

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

在UITableView的Size Inspector中将'Content Insets'更改为Never,以便最后摆脱这个空间。

答案 3 :(得分:1)

在我的情况下,tableView是通过编程方式创建的,因此我必须设置tableView.estimatedRowHeight才能使空间消失

答案 4 :(得分:1)

在这种情况下,您可以将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)];
}

答案 5 :(得分:0)

这是通过Storyboard(iOS 11)轻松修复的方法:

选择表格视图>尺寸检验员>内容插入:从不

答案 6 :(得分:0)

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

enter image description here

答案 7 :(得分:0)

@urgentx的answer完成了我想要的大部分操作,但并没有完全解决。我处于类似情况(聊天应用程序的UITableView倒置),但是他们的建议完全禁用了安全区域行为,这在iPhone X等设备上是不希望的,因为这意味着该表视图将同时被首页指示器和任何顶部导航栏。

我做了以下操作,以使表格视图在倒置时仍能正确避开安全区域:

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)
}

从本质上讲,这可以复制contentInsetAdjustmentBehavior = .automatic的行为,但插图会沿Y轴翻转。

答案 8 :(得分:0)

如果是iOS 11和Xcode 9,则已被接受的解决方案不再是正确的解决方案。要实现类似效果,您必须转到Size Inspector,您可以在其中找到此解决方案:

enter image description here

您可以在代码中实现相同的目的

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

答案 9 :(得分:0)

我遇到了同样的问题,使用最新的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
}

答案 10 :(得分:0)

我的问题无法通过答案解决。 我有一个UISearchbar作为tableHeaderView,引起空白(我不知道为什么)。我从情节提要的表视图中删除了搜索栏,并在表头的viewWillLayoutSubviews中添加了问题,然后解决了问题。

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