【问题标题】:Delete Rows of custom UITableViewCell frame issue删除自定义 UITableViewCell 框架问题的行
【发布时间】:2016-11-07 18:19:22
【问题描述】:

我对 Xcode 和 Swift 编程比较陌生,在我的第一个应用程序中,它由一个带有自定义 TableViewCell 的 tableview 组成,它覆盖变量 frame 以不覆盖视图的整个宽度:

override var frame: CGRect {
        get {
            return super.frame
        }

        set {
            var frame = newValue
            frame.origin.x += 175
            frame.size.width -= 350
            super.frame = frame
        }
    }

一切都按预期工作,但是当我使用self.tableView.deleteRows(at: [path], with: .automatic) 删除 Tableview 单元格时,单元格出现了一个奇怪的问题;看起来单元格再次获得了比旧的新(更小)帧,但只有可见单元格;如果细胞重新加载,问题就消失了。所以它只是在删除之后发生;如果单元格离开屏幕然后再次出现,它会恢复到正常大小。 我的猜测是`newValue 已经是一个自定义框架,然后再次被自定义,这使得它变得更小;但我不知道如何解决这个问题!

以下是 iPad 版的截图:

Normal tableview

After deleting

任何帮助将不胜感激!如果您需要更多信息,请在 cmets 中告诉我!谢谢!

【问题讨论】:

    标签: ios tableview cell frame tableviewcell


    【解决方案1】:

    我建议你不要像你那样干涉细胞的框架

    1. 将单元格的backgroundColor 设置为UIColor.clear
    2. 在单元格的 contentView 上创建自定义视图,水平居中,比单元格本身窄 350 点。

    或者

    1. 使整个tableView的width比屏幕宽度小350点
    2. 忘记更改单元格的width

    对于第一个建议视图层次结构和自动布局约束将如下所示:

    问题在于自定义视图我会遇到更多麻烦 因为每个单元格的高度都不一样

    这完全是另一个话题。您应该使用动态单元格高度,在此 RayWenderlich tutorial

    中有详细描述

    基本上,您需要正确设置自动布局约束并在viewDidLoad中执行此操作:

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 140
    

    不鼓励的做法:

    我的猜测是`newValue 已经是一个自定义框架,然后得到 再次定制,使其更小;但我不知道怎么做 解决这个问题!

    如果您仍想使用您的方法,不要只是减少值,使用UIScreen's 或tableView's width从头计算它

    不是这个

    frame.origin.x += 175
    frame.size.width -= 350
    

    这样做:

    frame.origin.x = 175
    frame.size.width = UIScreen.main.bounds.size.width - 350
    

    【讨论】:

    • 好的,感谢您的详细解答!从我的角度来看,第一个建议对我来说最有意义,但是您能否提供一些起始代码,如何以及在何处在 contentview 上制作此自定义视图?我有一段时间没有这样做了...谢谢!
    • @EliasDatler 你在使用自动布局吗?
    • 是的,只要我可以。 @alexburtnik
    • 哦,我明白了,您最后建议的方法非常有效!所以问题可能是我没有从头开始计算视图宽度......非常感谢你!我真的很感激
    • 不客气。有关第一种方法的更多详细信息,请参阅更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多