删除自定义 UITableViewCell 框架问题的行
Posted
技术标签:
【中文标题】删除自定义 UITableViewCell 框架问题的行【英文标题】:Delete Rows of custom UITableViewCell frame issue 【发布时间】: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 中告诉我!谢谢!
【问题讨论】:
【参考方案1】:我建议你不要像你那样干涉细胞的框架。
-
将单元格的
backgroundColor
设置为UIColor.clear
在单元格的 contentView
上创建自定义视图,水平居中,比单元格本身窄 350 点。
或者
-
使整个tableView的
width
比屏幕宽度小350点
忘记更改单元格的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 哦,我明白了,您最后建议的方法非常有效!所以问题可能是我没有从头开始计算视图宽度......非常感谢你!我真的很感激 不客气。有关第一种方法的更多详细信息,请参阅更新的答案。以上是关于删除自定义 UITableViewCell 框架问题的行的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义 UITableViewCell 时,imageview 框架为零
使用自定义 UIButton 删除 UITableViewCell
编辑自定义 UITableViewCell 时不出现插入/删除编辑控件