2012-03-11 3 views
3

Alxandr(Feb/2012)によって作成された最新のものを使用しています。MT.D MultilineEntryElementを使用した人はいますか?

私はEntryElementを追加するのと同じ方法でセクションに追加しようとしています。 MultilineEntryElementはセクションに追加されますが、受信セルはデフォルトサイズを超えて展開されません。 MLEEは、以下のセクションを上書きします。私はフルスクリーン幅と10行の長さにデフォルトしたいと思います。これを行う最善の方法は何ですか?

ありがとう! Matt

+0

マットは、あなたをしましたこれを解決する?私は自分のMLEEを書くことを試みたが、同様の問題に遭遇した。私はgithub(SuperYeti)に別のインプラントを見つけましたが、同じ問題を抱えています。 alxandrのコードbtwはどこで見つかりましたか?私はMiguelのプルリクエストページでそれを参照していましたが、ソースは見つかりませんでした... –

答えて

0

私はこの問題についてもう少し研究をしました。注意してください - 私はおそらく他の人とは少し異なるMultilineEntryElementの独自の実装を使用しています。

最初に、RootElementの初期作成の一部として作成されたセクション内にMultilineEntryElementが配置されている場合、問題が「単純な」シナリオで私には現れないことを述べる価値があります。この問題は、すでにDialogViewControllerによってレンダリングされている既存のRootElementを操作するときにのみ現れます。

MonoTouch.Dialogが行のサイジングを計算する方法にバグがあるようです。要素がIElementSizingを実装する場合、MT.DはそのGetHeight()オーバーロードを呼び出します。 MT.Dが "不規則な"高さの要素を検出すると、囲むセクションへの変更を処理するたびにこのメソッドを呼び出す必要があるようです。これは高価になる可能性があります...もしMT.DがRootElementをレイアウトし、IElementSizingを実装している要素を見つけていない場合は、(最適化のために)MT.DはIE POST初期レンダリングが追加されました。したがって、CELLのRowHeightプロパティは標準の行の高さを返し、MultilineEntryElementは、その下のセルに流出するUITextViewをレンダリングします。

回避策私は、IElementSizingを実装するDummyElementという単純な要素を作成し、GetHeight()に0を返し、初期レイアウトが行われる前にそれを最初のRootElementに追加することです。これを行うと、不規則な高さを持つ要素が登録され、後で要素 "DOM"に追加するときにMultilineEntryElementのGetHeight()メソッドを呼び出します。ここで

場合DummyElementの私の最小限のimplであることができます:

public class DummyElement : Element, IElementSizing 
{  
    public DummyElement() : base ("empty") 
    { 
    } 

    public float GetHeight (UITableView tableView, NSIndexPath indexPath) 
    { 
     return 0; 
    } 
} 
3

をこの問題に対処するには、次のように、trueにRootElementのUnevenRowsプロパティを設定します。

var r = new RootElement ("foo") { ... } 
r.UnevenRows = true; 
関連する問題