gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:46:33 24 4
gpt4 key购买 nike

我正在寻找一种方法来调整具有更复杂布局的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com