ios - 调整包含多个 View 的 iOS 表格 View 单元格的大小

标签 ios uitableview uiview resize

我正在寻找一种方法来调整具有更复杂布局的 tableView 单元格的大小。

为了简化问题的描述,tableview 单元由三个 View 组成。一个定义单元格“背景”的 View 和两个附加 View (每个 View 的高度均为背景单元格的 45%)。 这些附加 View 之一被标记到背景 View 的顶部,另一个被标记到底部。 如果用户点击表格 View 单元格,它应该以只有顶 View 可见的方式缩小,并且在用户再次点击之后,它应该再次调整到其完整大小。

用户点击由函数处理

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

调整大小是通过

完成的
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

不幸的是,缩小表格 View 单元格后,两个附加 View 都以原始高度的一半显示。

    var selectedCell = -1

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
        tableView.deselectRow(at: indexPath, animated: true)
        if (selectedCell != indexPath.row)
        {
            selectedCell = indexPath.row
        }
        else {
            selectedCell = -1
        }
        tableView.beginUpdates()
        tableView.endUpdates()

    }

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if (indexPath.row == selectedCell)
        {
            return 65
        }
        else {

            return UITableView.automaticDimension
        }
    }

我现在正在寻找一种方法来更改代码,在缩小后只有上面的 View 可见。 Example picture of the fully visible cell 在示例图片中,缩小表格 View 单元格后应该只显示红色 View 。

提前致谢 帕特里克

最佳答案

原因是,当单元格缩小时,您的 View (因为它们的大小是相对于父级的大小定义的)也会缩小并且以一半大小可见。它们并没有真正消失/隐藏在视野之外。您需要的是从 View 中隐藏/删除它们。

从您的描述来看,您正在使用简单的约束来实现此目的。这可以通过仅使用约束来完成,但需要做更多的工作。因此,我将提到两种完成此任务的方法:

  1. 仅使用约束

当用户点击单元格时,您需要将底部 View 的高度设为 0。此外,如果您不希望单元格缩小时显示中间 10% 的部分,则需要创建一个附加约束顶 View 的底部到单元格 contentView 的底部。同样,您的底部 View 也将有两个高度限制,一个用于 45%,另一个用于 0。 我们的想法是同时具有这两个约束,但具有不同的优先级。初始约束将具有较高的优先级,而另一个约束将具有较低的优先级。尽管这些约束会相互矛盾,但 iOS 会采用优先级较高的约束来渲染 View 。

接下来,您需要在用户点击时切换较高优先级约束的事件属性,这将依次让 iOS 使用较低优先级约束来渲染 View 。

  1. 使用堆栈 View :

iOS 9 引入了堆栈 View ,它是一个辅助 View 。它基本上为您处理约束,至少是其中的一部分。当您对堆栈 View 的 subview 隐藏一个 View 时,堆栈 View 会自动将该 View 的高度设为 0。阅读有关垂直堆栈 View 的更多信息,您就会明白这一点。

关于ios - 调整包含多个 View 的 iOS 表格 View 单元格的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099594/

相关文章:

iOS + MKMapView 用户触摸绘图

ios - Italic 字体不适用于 iOS 7 上的中文/日文/韩文

iphone - 内存使用随着 CTFontCreateWithName 和 CTFramesetterRef 的增加而增长

ios - swift : View in a UIScrollView is unable to detect touch

ios - CGPDFPage 绘图导致内存问题(Swift 3)

ios - 更改单元格高度后 UITableView 在滚动时跳动

ios - 如何遍历包含当前骑手 ID 的每个键?

ios - 侧边菜单覆盖特定情况下的后退按钮

ios - 文本更改时 UILabel 文本颜色更改

iphone - UITableView 复选标记计数