Ios UITableView加载和每次更新时展开的顶部和底部单元格

Ios UITableView加载和每次更新时展开的顶部和底部单元格,ios,layout,uitableview,rubymotion,Ios,Layout,Uitableview,Rubymotion,我们正在使用一个UITableView来布局一些带有标签的字段,我们得到了一些奇怪的行为。 我们有一个名为TextFieldView的类,它实现了UITableViewCell,并在其子视图中添加了UITextField和UILabel。然后通过表格委托将TextFieldView添加为表格的单元格。我们使用单元格作为rowatinexpath,高度作为rowatinexpath,行数部分,选择rowatinexpath 问题是,当我们最初加载表格时,所有单元格的高度都是44。但是当加载表格时,

我们正在使用一个
UITableView
来布局一些带有标签的字段,我们得到了一些奇怪的行为。 我们有一个名为
TextFieldView
的类,它实现了
UITableViewCell
,并在其
子视图中添加了
UITextField
UILabel
。然后通过表格委托将
TextFieldView
添加为表格的单元格。我们使用
单元格作为rowatinexpath
高度作为rowatinexpath
行数部分
选择rowatinexpath

问题是,当我们最初加载表格时,所有单元格的高度都是44。但是当加载表格时,第一个和最后一个单元格帧的高度设置为45。同样,每次执行
table.beginUpdates/table.endUpdates
(在文本更新中)时,第一个和最后一个单元格的高度都会增加+1

我们之所以调用begin/endUpdates,是因为我们还有一个
UITextView
,当我们更改它的内容时,它会扩展。不过,我们已经删除了
UITextView
,看看这是否与“bug”有关,而事实并非如此

我们希望有人有过类似的问题,或者能发现我们的大脑放屁我们都没有主意了:-)

以下是初始化我们的
UITableViewCell

class TextFieldView < UITableViewCell
....
def init()
        super.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier: nil)
        self.selectionStyle = UITableViewCellSelectionStyleNone
        self.styleClass = 'control'
        @focus = UIImageView.alloc.initWithImage(UIImage.imageNamed('focus.png'))
        frame = self.frame

        @focus.frame = [[frame.size.width - 13, 8], [13, 28]]
        @focus.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
        @focus.hidden = true
        self.contentView.addSubview(@focus)

        size = self.frame.size  # 44 x 320
        self.styleClass = 'control text-field'

        @label = self.create_label([[10, 10], [140, 24]])
        self.contentView.addSubview(@label)

        @text_field = UITextField.alloc.initWithFrame([[160, 11], [size.width - 160 - 20, 24]])

        @text_field.adjustsFontSizeToFitWidth = true
        @text_field.minimumFontSize = 13
        @text_field.autoresizingMask = UIViewAutoresizingFlexibleWidth
        @text_field.borderStyle = UITextBorderStyleNone
        @text_field.backgroundColor = UIColor.redColor
        @text_field.font = UIFont.boldSystemFontOfSize(17)
        @text_field.styleClass = 'control'
        self.contentView.addSubview(@text_field)

        #@text_field.delegate = is handle by the view controller

        self
      end
class TextFieldView
我能想到的关于这些症状的唯一解释与您提供的代码示例不一致。如果您将可重复使用的单元出列,并在假定它们未被重复使用的情况下对其进行设置,则您将构建已具有所需结构的单元,例如,这可能会导致单元大小增加1个像素。例如,如果有足够的空间显示10行,而您有11行,当您上下滚动时,第一个和最后一个单元格将被重新使用,并且每次都将应用更改。上面的代码示例显示了重用标识符nil,表示您没有重复使用单元格。然而,您的表视图数据源可能会尝试将单元格出列(您没有显示执行此操作的代码),即使您显示的类假定情况并非如此,并且RubyMotion会在单元格出列后/出列时调用init。也许这个解释会给你一些想法去调查或帮助其他有同样症状的人。

谢谢你的回答。我们最终重构了代码,之后故障就消失了。我不确定这是真正的原因,但它可能会帮助有类似问题的人:-)