删除自定义UITableViewCell框架问题的行

时间:2016-11-07 18:19:23

标签: ios tableview cell frame tableviewcell

我对Xcode和Swift编程比较陌生,在我的第一个应用程序中,它包含一个自定义TableViewCell的tableview,它覆盖了可变帧,不覆盖视图的整个宽度:

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

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

1 个答案:

答案 0 :(得分:0)

我建议你不要像你那样干涉单元格的框架

  1. 将单元格backgroundColor设置为UIColor.clear
  2. 在单元格contentView上创建自定义视图,水平居中,然后比单元格本身缩小350点。
  3. 或者

    1. 使整个表格width比屏幕宽度少350个点
    2. 忘记更改单元格width
    3. 对于第一个建议,视图层次结构和自动布局约束将类似于:

      enter image description here

        

      问题在于自定义视图我会遇到更多麻烦   因为每个细胞的高度彼此不同

      这完全是另一个话题。您应该使用动态单元格高度,详见[{3}}

      基本上,您需要正确设置自动布局约束,并在viewDidLoad

      中执行此操作
      tableView.rowHeight = UITableViewAutomaticDimension
      tableView.estimatedRowHeight = 140
      

      气馁的做法:

        

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

      如果您仍想使用自己的方法,不要减少值,请使用UIScreentableView从头开始计算' s width

      而不是这个

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

      这样做:

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