【问题标题】:Make Table View Cells to fill up the screen exactly in Swift让表格视图单元格在 Swift 中完全填满屏幕
【发布时间】:2016-03-14 18:13:16
【问题描述】:

我在故事板中构建的UITableView 中有三个单元格,当我运行它时,我在模拟器中得到了三个单元格,然后是下面的空白区域。我想要做的是让单元格根据 iOS 设备动态填充屏幕。我该怎么做?

【问题讨论】:

  • 应该都一样高吗?
  • @Eric 好吧,我计划添加一些其他单元格,我希望它们均匀对齐以填满屏幕,所以我想回答你的问题 - 是的

标签: ios swift uitableview


【解决方案1】:

设置单元格的最小高度,如果项目少,则使用均匀高度,否则使用minHeight。

let MinHeight: CGFloat = 100.0
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let tHeight = tableView.bounds.height

    let temp = tHeight/CGFloat(items.count)

    return temp > MinHeight ? temp : MinHeight
}

Swift 5 更新:

let minRowHeight: CGFloat = 100.0

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let tHeight = tableView.frame.height
    let temp = tHeight / CGFloat(items.count)
    return temp > minRowHeight ? temp : minRowHeight
}

【讨论】:

  • 感谢您的建议,我如何调用表格中的单元格数?我看到您正在使用items.count 来获取该号码
  • items 这里是你需要在表格中显示的实体,替换成你自己的对象即可。如果你不知道 UITableViewDataSource 的概念,可以找一些 UITableViewController 的教程,例如ralfebert.de/tutorials/ios-swift-uitableviewcontroller
  • 完美解决方案!谢谢!
  • 如果表格单元格有自动高度怎么办?
【解决方案2】:

您为此使用UITableView 有什么原因吗?如果您要将 TableView 放在屏幕上并且不会有可变数量的具有滚动能力的单元格,那么 TableView 确实不会给您带来任何真正的好处。

如果你只想拥有 3 个视图,每个视图的高度为屏幕高度的 1/3,你可以简单地使用 IB 使用this answer 中的方法将每个视图设置为屏幕的 1/3

或者如果你想使用自动布局,这是更好的解决方案,你可以使用this technique

【讨论】:

  • 我问这个问题的原因是因为当我实际单击单元格时,它没有给我更改大小或类似内容的选项。所有对齐功能都是灰色的,因此查看您建议的答案,我无法实现其中任何一个。并回答您的问题:我不打算以编程方式添加单元格,我只想拥有大约 5 个等比例的固定单元格。
  • 如果你必须使用 TableView,我会使用@RWhoot 的答案并实现(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 如果有 5 个单元格,它们会全部适合屏幕,还是任何时候都只适合 3 个并且你需要滚动才能看到其余部分吗?
  • 当您说“如果您必须使用 TableView”时,您想到的替代方案是什么?我的意思是我刚开始在 iOS 中进行开发,我知道的唯一方法是创建一个 UITableView 并手动向其中添加单元格
  • 如果你有固定数量的区域,你可以为每个区域添加一个 UIView。一个 TableView 增加了开销,这些东西实际上只有助于处理需要滚动的大量项目,或者至少是动态数量的项目。你也可以看看UIStackView:appcoda.com/stack-views-intro
  • 看起来不错,但我想添加一个披露指示符,以便在单击单元格时将用户带到单独的视图
【解决方案3】:

在您的UITableViewDataSource 中设置- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 方法以根据UITableView 的内容高度计算行的高度。

【讨论】:

  • 感谢您的建议。什么是UITableViewDataSource?您在 ObjC 中提供的代码是什么?
【解决方案4】:

在 viewDidLoad 方法中设置零高度页脚视图。

tableView.tableFooterView = UIView()

【讨论】:

  • 您的建议删除了多余的单元格,但没有像我在问题中描述的那样对齐单元格。
猜你喜欢
  • 2016-01-15
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多