0

我们正在使用 anUITableView来布局一些带有标签的字段,并且我们得到了一些奇怪的行为。我们有一个名为的类TextFieldView,它实现UITableViewCell了 ,并将 anUITextField和 an添加UILabel到它的subviews。然后TextFieldView通过 table-delegate 将其添加为表格的单元格。我们使用cellForRowAtIndexPath, heightForRowAtIndexPath, numberOfRowsInSection, didSelectRowAtIndexPath.

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

我们调用 begin/endUpdates 的原因是因为我们也有一个UITextViewwhich 在我们更改其内容时会扩展。我们已经删除了UITextView这个,看看这是否与“错误”有关,但事实并非如此。

我们希望有人遇到过类似的问题 - 或者可以发现我们的大脑放屁!- 我们都没有想法:-)

这是我们如何初始化我们的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
4

1 回答 1

1

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

于 2013-12-24T00:06:09.163 回答