2013年10月20日日曜日

TitaniumのTableViewのrowが右とか左にずれてしまう問題

  • このエントリーをはてなブックマークに追加

TitaniumでTableViewを使ってデータを入れていたときに、
なぜかテーブル内のrowが若干右にずれてしまうという問題が発生してしまった。

rowの中にviewとかimgを入れているからかとかって考えたけど、
全然そんな事は無くて原因はよくわからなかった。

色々と方法を試してみたところなんとか解決したので何をしたかとか書いてみようと思う。

上のような感じ。
とりあえずどうしてなのか頑張ってみたのは下記になる。
1:editableとかが原因なのか、画像を表示しているからなのかなどで判別
2:空のデータをテーブルに20個入れてみて、その後テーブルを空にしてからちゃんとしたデータを入れる
3:データの入れ方をappendRow()ではなくて、table.data = []としてまとめて入れる

■1:editableとか画像があるからなのかとか
全然そんな事は無くてとりあえず何も変わらなかった。
違うタブではまんま同じでeditableを設定していなかったからeditableかな?と思ったけど違った。

■2:空のデータを入れてからちゃんとしたデータを入れる
1で諸々やっている最中に空のデータを入れたらずれるとかそういうことがなかったので、
一度空のデータを20個ほど入れてからちゃんとしたデータを入れる事にしてみた。
そしたら若干改善があり、右側にずれてるのから左側にずれるようになった。

意味がある事がわかったのでとりあえず入れるデータ量を変更してみたりしたけど、
同じく左側にずれるだけであまり意味がなかった。

■3:データの入れ方を変更する
このテーブルはデータを入れる際にappendRow()を使って入れていたので、
そもそもこれが原因なのかと思って入れ方を変更する事にしてみた。

var tblAry = [];

for(var i = 0;i < 10;i++){
  var row = createRow(); //createRow()はカスタムのrowを作るための独自の関数
  tblAry.push(row);
}

table.startLayout();
table.data = tblAry;
table.finishLayout();
上記のように記述したところ無事にずれる事無く表示されるようになった。
以前書いたTitaniumのTableViewのパフォーマンス改善という記事でも書いた、まとめて入れる方法というのを行った。

ちなみに今回のずれてしまうのはiPhone 4Sでは確認できなく、iPhone 5sで確認された事象。
とりあえずこんなバグ?なのかよくわからないのはシミュレーターでは確認されなかった。
やっぱりちゃんと実機で確認するのは重要だなぁという感じなので気をつけようと思う。

Adsense