リア充爆発日記

You don't even know what ria-ju really is.

TitaniumのTableViewの中のImageViewの横幅が画面幅いっぱいにならなかったときの対策メモ

TableViewの中でリモートの画像を読み込むImageViewを画面幅いっぱいに表示しようとしたところ、どうにもこうにもランダムに画面幅にいっぱいにならず、両脇にスキマができるような状況が発生した。

発現パターンがつかめず、対応にあぐねていたところ、TableViewRowを追加すると、スキマの出てたRowがそのタイミングで両幅いっぱいにリサイズされる事に気づいた。※追加したタイミングでミューンと横幅いっぱいに伸びる。

このことから、リモートから画像を読み込んでRow幅を確定するタイミングと、TableView完成のタイミングのズレみたいなものが影響しているのではないか、と仮説をたて、であるならば、タイミングをずらしてRowを追加してやればスキマのできたRowを再度リサイズするトリガーを与えら得るのではないか、と。

で、どうやら、この仮説がヒットしたのでメモ。

_adjustTableViewWidth = ->
  c = Alloy.createController('contents_view/top/row')
  $.articleList.appendRow c.getView()
  $.articleList.deleteRow($.articleList.data[0].rowCount-1,{animationStyle:Titanium.UI.iPhone.RowAnimationStyle.NONE})

_doSearch = ->
      $.articleList.appendRow rows
~snip~
      setTimeout( ->
        _adjustTableViewWidth()
      ,500)

このとおり、Rowの追加処理の0.5秒後に仮のRowを入れる。でそのままだと当然いらんものが画面に表示されるので即座に消す。という処理をいれた。

この現象で困ってない人はなんのことやらだろうけど、とにもかくにも現場的には救いのバッドノウハウイェー。