【问题标题】:How to add UITextView to bottom of UITableView如何将 UITextView 添加到 UITableView 的底部
【发布时间】:2019-08-09 17:30:58
【问题描述】:

我有一个项目,我必须在一个屏幕上显示大量信息。信息量不大,但实现起来很复杂。对于这个问题,我建议查看this screenshot,这将说明我想要实现的目标。

我目前使用包含UITableViewUIViewController 设置此屏幕,该UITableView 使用中间部分的自动布局固定到视图的顶部、底部、前导和尾随锚点。这很好用。然后我添加了一个tableHeaderView,其中包含有关用户的信息。现在我刚刚在tableFooterView 中添加了第二个UITableView,令人惊讶的是,这也很有魅力。我在高度方面遇到了一些麻烦,但我设法在viewDidLayoutSubviews() 方法中完成了它。但这有点跑题了。

我现在处于最后阶段,我想添加 UITextViewUIButton(在 UIView 容器中)以允许用户添加 cmets。起初,我在tableFooterView 中添加了这个并且它起作用了,但是一旦内容太短(例如中间只有一行并且还没有cmets),UITextView 就会出现在屏幕中间(直接在UITableView的内容下)。我对此进行了阅读并认为这是tableFooterView 的预期行为,所以我现在正试图找出一种方法来添加此自定义视图以添加将始终打开的 cmets如果内容没有填满整个屏幕,则底部,但如果内容大于屏幕大小,也会随着内容滚动。 (理想情况下,当用户输入文本时,我希望能够扩大或缩小 UITextView - 如果有人建议 contentInsets,这可能是相关的)。

有什么建议吗?我是否应该将子视图直接添加到UITableView(据我所知,不推荐)?我应该在 UITableView 上使用 contentInsets 并将UIView 容器添加为我的主要UIViewController 的子视图吗?在搜索了多种解决方案但没有找到合适的解决方案后,我有点迷茫,所以我希望你们能帮助我。干杯!

【问题讨论】:

  • 这是怎么复制的?他们建议在那里使用 tableFooterView 或节页脚。 tableFooterView 是我目前用于 cmets 的,但是当内容太少时它最终不会位于底部。部分页脚是不可能的,因为我希望它位于整个 UITableView 的底部。
  • 可能重复,也不能重复。

标签: swift uitableview uitextview


【解决方案1】:

添加UITextView 很棘手,因为它是UIScrollView 的子类,就像UITableView 一样,并且将滚动视图添加到另一个滚动视图不仅对于手势识别器来说难以处理,而且对于自动布局来说也是如此.

让您的生活更轻松的是在您的视图控制器中只有 1 个具有不同部分的表格视图,并且每个部分都有不同类型的单元格。

我喜欢做的是在我的视图控制器中声明一个enum

class MyViewController: UIViewController {
    private enum Section: Int, CaseIterable {
        case foo
        case bar
    }
}

extension MyViewController: UITableViewDataSource {
    func numberOfSections(in tableView: UITableView) -> Int {
        return Section.allCases.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        guard let section = Section(rawValue: section) else { preconditionFailure() }

        switch section {
        case .foo:
            return 1
        case .bar:
            return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let section = Section(rawValue: indexPath.section) else { preconditionFailure() }

        let cell: UITableViewCell
        switch section {
        case .foo:
            cell = ...
        case .bar:
            cell = ...

        return cell
    }
}

对于带有长文本的单元格,您可以使用 default 单元格样式(在您的 XIB/故事板中)并设置

cell.textLabel?.numberOfLines = 0

表格视图应该能够自动调整大小以适应整个文本。

您需要在场景中使用UITextView 的唯一原因是您希望用户能够编辑文本。否则,您可以省去很多痛苦,然后使用UILabel

【讨论】:

  • 感谢您的意见。然而,我想要实现的整个想法是用户可以添加评论,所以他们肯定需要能够编辑文本。看看我在我的 OP 中添加的屏幕截图,我正在尝试添加最底部的“添加评论...”视图。
【解决方案2】:

您应该在主屏幕底部添加单独的 UIView 并在其中添加 UITextView 作为子视图。 在此容器视图上方添加 TableView,使其滚动并且文本视图始终在底部可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2012-04-10
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多