QA@IT

Titanium MobileでLabelのverticalAlign: topがしたい

2792 PV

Label.heightをautoにしている場合、Label.textにテキストを入れることでheightが増える場合に一瞬

文章…

と三点リーダーがLabelの末尾に表示されるのを消したいです。 
Label.heightを予め大きくとっておけば三点リーダーは出ないのでLabelでVerticalAlign: topができればいいのですが対応してないので困っています。

Label.textに入れるタイミングで自分で計算してheightを増やす、もしくはTextFieldを使えとありますが、簡単な解決法は無いでしょうか。

環境はiPhone Simulatorです。

回答

Label.textを変更すると再描画が発生して上記のようになるのだと思います。

Ti.UI.LabelにはVerticalAlignはないので、質問にある通りおとなしく計算してheightを増やすかTextFieldを使うのがいいと思います。

または、下記のようなテキスト追加・初期化メソッドを持つラベルコンテナに差し替えるのはどうでしょうか?ぜんぜん簡単ではないですが
iOS5.1で挙動を確認しています。Androidはわかりません。
もうちょっと拡張したら、テキスト追加時にエフェクトをかけるとか、1行戻るとかもできると思います。

@labelContainer = Ti.UI.createView
  top:0
  left:0
  Width: Ti.UI.FILL
  height: Ti.UI.SIZE
  layout:'vertical'
  initText: ->
    @.add Ti.UI.createView
      layout: 'vertical'
    return null
  refreshText: ->
    @.remove(@.getChildren()[0])
    @.add Ti.UI.createView
      layout: 'vertical'
    return null
  addText: (text)->
    @.getChildren()[0].add Ti.UI.createLabel
      top: 0
      left: 0
      width: Ti.UI.FILL
      text: text
    return null

# テキストを初期化する
@labelContainer.initText()

# テキストを追加する
@labelContainer.addText('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.')

# テキストをリフレッシュする
@labelContainer.refreshText()
編集 履歴 (0)
  • なるほど、ありがとうございます。一文字ずつ追加とかでも問題無いかどうか試してみます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。