0

UITableViewラベル付きのフィールドをレイアウトするために を使用していますが、奇妙な動作が発生しています。TextFieldViewを実装し、とをその にUITableViewCell追加するというクラスがあります。その後、table-delegate を介してテーブルのセルとして追加されます。、、、を使用します。UITextFieldUILabelsubviewsTextFieldViewcellForRowAtIndexPathheightForRowAtIndexPathnumberOfRowsInSectiondidSelectRowAtIndexPath

問題は、テーブルを最初にロードしたとき、すべてのセルの高さが 44 であることです。しかし、テーブルがロードされると、最初と最後のセル フレームの高さが 45 に設定されますtable.beginUpdates/table.endUpdates。テキスト更新) 最初と最後のセルの高さが +1 ずつ増加します。

begin/endUpdates と呼ぶ理由はUITextView、コンテンツを変更すると展開される もあるからです。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 の再利用識別子を示しています。ただし、テーブル ビューのデータ ソースがセルをデキューしようとする可能性があります (' あなたがそれを行うコードを示しました)あなたが示したクラスはこれが当てはまらないことを前提としており、どういうわけかRubyMotionはセルのデキュー後/デキュー中にinitを呼び出しています。たぶん、その説明は、同じ症状を持つ他の人を調査したり助けたりするためのいくつかのアイデアをあなたに与えるでしょう.

于 2013-12-24T00:06:09.163 に答える