如何删除UITableView上方的空白区域?

时间:2016-02-13 13:20:36

标签: ios swift uitableview uiview uiimageview

所以我使用UITableView来显示有关不同电影的信息。

在VC的顶部,我有UIImage位于UIView内。然后我的桌子就在下面。该表目前正好位于图像的底部(这就是我想要的),见下文:

enter image description here

问题

我按照教程添加了一个简单的效果,因此当用户拉下tableView时,图像会放大。您可以在此处查看教程,了解我的意思:See here

这一切都很精彩并且给了我想要的效果,然而,它现在在图像下方添加了一个空白区域,请参见下图:

enter image description here

一切仍然正常,效果按预期工作,但现在这个空间 - 我真的不想要。

此VC的故事板中的设置设置如下:

enter image description here

我为实现效果而添加的代码如下:

private let KTableHeaderHeight: CGFloat = 160.0 // which is the height of my UIImage
var headerView: UIView!

override func viewDidLoad() {

    super.viewDidLoad()

    headerView = tableView.tableHeaderView
    tableView.tableHeaderView = nil
    tableView.addSubview(headerView)

    tableView.contentInset = UIEdgeInsets(top: KTableHeaderHeight, left: 0, bottom: 0, right: 0)
    tableView.contentOffset = CGPoint(x: 0, y: -KTableHeaderHeight)
    updateHeaderView()

}

然后:

func updateHeaderView() {

    var headerRect = CGRect(x: 0, y: -KTableHeaderHeight, width: tableView.bounds.width, height: KTableHeaderHeight)
    if tableView.contentOffset.y < -KTableHeaderHeight {

        headerRect.origin.y = tableView.contentOffset.y
        headerRect.size.height = -tableView.contentOffset.y

    }

    headerView.frame = headerRect

}

override func scrollViewDidScroll(scrollView: UIScrollView) {

    updateHeaderView()

}

如果我注释掉我添加的所有代码,那么它再次看起来很好,所以我猜这是导致空间的代码。

我真的很想知道为什么这个差距已经形成,以及如何删除它,仍然使用添加的代码来使图像放大效果。

更新

我的UIImageView布局属性:

enter image description here

3 个答案:

答案 0 :(得分:0)

您的问题很可能是private let KTableHeaderHeight: CGFloat = 160.0行,它不等于标题中imageView的高度。

您需要在缩放后找出imageView的固定高度,您可以通过将原始图像高度乘以视图宽度/原始图像宽度来获得,并设置imageView高度和{ {1}}到那个值。

答案 1 :(得分:0)

如果您使用分组的UITableView,那么它会为该组创建一个空间,而不确定如何摆脱它。您可能需要考虑将其作为UITableView计划,然后通过委托创建所需的部分标题

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    // create UIView here
}

但是,在使用示例项目后,您似乎可以调整顶部的kTableHeightHeader变量进行调整以隐藏顶部标题。

我修改了示例项目,因此您可以看到它here

答案 2 :(得分:0)

Swift 代码:

tableView.tableFooterView = UIView()

目标C 代码:

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];