调整包含多个视图的 iOS tableviewcell 的大小

帕特里克·鲍尔斯

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

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

用户点击由函数处理

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

并且调整大小是由

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

不幸的是,在缩小 tableview 单元格后,两个附加视图都显示为原始高度的一半。

    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
        }
    }

我现在正在寻找一种以某种方式更改代码的方法,即在缩小后只有上视图可见。完全可见单元格的示例图片 在示例图片中,缩小tableview 单元格后应该只显示红色视图。

提前致谢帕特里克

凯瑞

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

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

  1. 仅使用约束

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

接下来,您需要在用户点击时切换较高优先级约束的 active 属性,这将反过来让 iOS 使用较低优先级约束来呈现视图。

  1. 使用堆栈视图:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自动调整tableViewCell中的textView大小-iOS 9(Objective-C)

来自分类Dev

iOS 自动调整大小的容器视图

来自分类Dev

iOS-使用触摸拖动分隔符调整多个视图的大小

来自分类Dev

在iOS中调整大小

来自分类Dev

iOS调整UITableheaderView的大小

来自分类Dev

快速设置TableViewCell的大小

来自分类Dev

tableviewcell内部的视图高度与ios 7和ios 8不同

来自分类Dev

iOS:通过删除子视图来调整子视图的大小

来自分类Dev

iOS7自动版式,视图调整大小和iAd

来自分类Dev

子视图调整大小时,iOS LayoutSubviews被多次调用

来自分类Dev

子视图调整大小时,iOS LayoutSubviews被多次调用

来自分类Dev

iOS SKSpriteKit:调整SKSpriteNode的大小

来自分类Dev

在iOS中调整UIImageView的大小

来自分类Dev

iOS视图TableViewCell中的面向对象编程问题

来自分类Dev

iOS自定义TableViewCell类子视图返回null

来自分类Dev

TableViewCell子视图在IOS 7中无法访问

来自分类Dev

tableviewcell的高度和框架大小?

来自分类Dev

在iOS中摇动tableviewcell

来自分类Dev

在iOS中摇动tableviewcell

来自分类Dev

iOS Swift TableviewCell问题

来自分类Dev

iOS视图的大小已调整为屏幕大小,首次出现时出现延迟

来自分类Dev

调整包含更改窗口大小的图像的多个标签的大小

来自分类Dev

iOS:UICollectionViewCell根据屏幕大小自动调整大小

来自分类Dev

iOS-Shadow无法正确调整大小

来自分类Dev

在iOS 8中动态调整inputAccessoryView的大小

来自分类Dev

iOS键盘使用Phonegap调整屏幕大小

来自分类Dev

如何在iOS中调整UIView的大小?

来自分类Dev

iOS UITextField自动调整大小符合内容

来自分类Dev

iOS:使用AutoLayout调整UIImageView的大小

Related 相关文章

热门标签

归档