【问题标题】:I want a UITableView inside of a UIScrollView to extend to the bottom of the UIScrollView and not get cut off by initial screen我希望 UIScrollView 内的 UITableView 扩展到 UIScrollView 的底部,并且不会被初始屏幕截断
【发布时间】:2017-09-05 00:10:14
【问题描述】:

所以我有一个视图控制器,我在其中放置了一个滚动视图。在滚动视图中,我在上半部分放置了一堆项目,例如图像、标签和按钮。在下半部分,我放了一个 uitableview。我设置了所有的约束和一切。 我使用了以下代码:

let bounds: CGRect = UIScreen.main.bounds
let w:Int  = Int(bounds.size.width)
let h:Int = Int(chaptersTableView.contentSize.height)
let temp: Int = 300 + h
scrollView.contentSize = CGSize(width: w, height: temp)
chaptersTableView.frame = CGRect (x: 0, y: 280.5, width: self.view.frame.size.width, height: CGFloat(44 * sampleModel.objectChapterList.count))

我想设置滚动视图的内容大小,然后设置我的tableview框架的高度。

tableview 意味着包含许多项目,所以我希望用户能够向下滚动,并且滚动视图的全部内容向下滚动以显示更多的 tableview。但是,表格视图总是被切断,当我在滚动视图中向下滚动时,表格结束。我必须在 tableview 内部滚动才能访问更多单元格。

即使我将“44 *(表格中的单元格数)”替换为 100 之类的随机数,它也会首先将表格剪掉,这样它就很短,但是当我点击屏幕时,表格将更改为恢复到屏幕底部的全长(但不是滚动视图的底部)。

我想把滚动视图上半部分的所有东西都变成表格视图的另一个单元格,这样它就可以成为表格的一部分,我可以避免这个麻烦,但这会是很多工作,所以我想要看看我能不能做到这一点。

如果您需要图片或其他东西,我可以提供。如果我不清楚,请务必发表评论,我可以更好地解释。

【问题讨论】:

  • 你在使用自动布局吗?使用自动布局非常容易。
  • 你为什么使用滚动视图@Ethan Zhao
  • @VinodKumar 这样我就可以向下滚动页面并让页面顶部与 tableview 一起下降。
  • @Dima 是的,我正在使用自动布局

标签: ios swift xcode uitableview uiscrollview


【解决方案1】:

我建议你只使用 tableView。您可以在 tableView 的标题中创建您的顶视图。这样做就不需要维护scrollView的内容大小了。

【讨论】:

  • 嗯,我明白了。但是,我已经在使用 tableview 的标题来显示标签。如果我这样做,我能保留它吗?
  • 这是根据您的要求在表头或节头中管理视图的好方法。
【解决方案2】:

当两个具有相同方向的可滚动视图相互放置时,总是会出现问题。我认为在您的情况下最好只在屏幕上放置UITableView:您可以将UITableView 放置在另一个包含静态内容的不可滚动视图中,我们将您的静态内容作为UITableView 的标题.如果您需要我详细说明这个想法,请告诉我。希望,它会有所帮助。

【讨论】:

  • 我认为 Ethan 想要的是只有 一个 可以滚动。他希望 tableview 完全扩展以适应其内容,并且只有 scrollview 可以滚动。
  • 我明白了,但我在这里根本看不到任何需要 UIScrollView 的东西。使用单个可滚动视图会更容易,不是吗?
  • 哦,我明白了。但是,我已经有一个作为标签的 tableview 的标题。如果我将所有内容都放在标题中,我能保留它吗?
  • @EthanZhao,我想你有 UITableView 部分的标题,而不是 UITableView 本身。所以,是的,您可以轻松地为 UITableView 添加标题,而无需更改您的部分的标签。
  • @AleksandrMedvedev 嗨,我做到了,而且成功了!非常感谢!我是个白痴,哈哈……一直都很简单,我走了这么艰难的路……
【解决方案3】:

我认为你应该这样做:

第一:(见https://forums.developer.apple.com/thread/81895

tableView.estimatedRowHeight = 0 tableView.estimatedSectionHeaderHeight = 0 tableView.estimatedSectionFooterHeight = 0 tableView.rowHeight = 70

然后

tableView.frame.size.height = tableView.contentSize.height

【讨论】:

  • 效果很好,我在 UITableView 上方有自定义视图。两者都在 UIScrollView 内。只添加了tableView.isScrollEnabled = false
  • 如果你不想使用'all with a tableview解决方案'这很好用,但是我没有设置rowHeight..让它自己计算。
【解决方案4】:

我认为您想要做的是在UIScrollView 中添加一个静态表。据我所知,UITableViewUIScrollView 的子类,这意味着您将UIScrollView 放入另一个UIScrollView。这可能会导致滚动出现奇怪的行为。

如果你已经计算了内容大小并设置了表格框架大小,也许你可以尝试使用以下代码禁用表格视图的滚动属性:

tableView.scrollEnabled = NO;

告诉我怎么回事:)

【讨论】:

  • 你好,我试过了,但表格在初始屏幕结束时仍然被切断
  • 我试图重现这个问题,但我的工作正常。你能提供一张你提到的“切断”的照片吗?谢谢。
  • OK,我意识到每当我将tableView的frame设置为XY大于0时,scrollView会剪切表格的右侧或底部。我通过设置scrollView.contentInset 属性来补偿已切割的区域,并且已修复。例如,您将Y 值设置为280.5,因此将其添加到您的代码中:scrollView.contentInset = UIEdgeInsetsMake(0, 0, 280.5, 0)。这四个值分别是topleftbottomright,表示滚动视图的空间(边距)。让我了解结果:)
  • 嗯.. 我真的不知道是什么在切桌子。您是否正确计算了表格高度(包括标题高度)?顺便说一句,我没有设置 scrollView.contentSize 属性就可以正常工作。
  • 你是如何在你的 uiscrollview 中设置这些东西的?顶部有东西,底部有 uitablrview 吗?
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2018-07-29
  • 2014-09-24
  • 2013-06-03
相关资源
最近更新 更多