1

私の iPad アプリでUITableViewは、ポップオーバーに表示される があります。表示したい値が複数あるためUITableViewCell、テーブル内の多くの「列」をシミュレートするために、いくつかのラベルを使用してカスタムを作成しました。私がやりたいことは、すべての「列」が並んでいることを確認することです。

問題は、XML Web サービスからデータを動的に入力しているため、列の幅をハードコーディングできないことです。そのため、その呼び出しを行ってデータを受け取るまで、必要な幅がわかりません。 .

私の考えは、データを(取得したら)ループし、のsizeWithAttributs:方法を使用しNSStringて各列の最大幅を取得することです。次に、その幅をカスタム セルに送信して、セルがlayoutSubviewsメソッドで使用できるようにします。問題は、私がこれをすべて でやろうとしていることです。NSLayoutConstraints私が見たすべての例では、任意のサイズconstraintsWithVisualFormat:が常にハードコードされています.実行時まで自分のサイズがわかりません. 私の考えは、次のようなことをすることです

NSDictionary *myDictionary = NSDictionaryOfVariableBindings(myLabel1,myLabel2)
NSArray *myConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myLabel1(%d)]-[myLabel2(%d)]",myWidth1,myWidth2 options:NSLayoutFormatAlignAllBaseline metrics:nil views:myDictionary];

しかし、これによりビルドエラーが発生します。constraintsWithVisualFormatハードコーディングする代わりに、実行時にサイズを動的に提供することは可能ですか?

4

2 に答える 2

0

これを書いているとき、私はばかばかしくないという閃きがあり、実際に の最初の引数として何を渡すことになっているのかを調べてみたくなりconstraintsWithVisualFormatましたNSString。したがって、解決策は、単純に文字列を前に分割することです。

NSString *formattedString = [NSString stringWithFormat:@"H:|-[myLabel1(%d)]-[myLabel2(%d)]",myWidth1,myWidth2];

そしてそれを渡します:

NSArray *myConstraints = [NSLayoutConstraint constraintsWithVisualFormat:formattedString options:NSLayoutFormatAlignAllBaseline metrics:nil views:myDictionary];

これはまだテストしていませんが (データのループなどを実行するためにコーディングしなければならないことがまだたくさんあります)、動作するはずです。私が言ったように、私が見たすべての例はサイズをハードコーディングしたので、他の誰かがそれを行う方法を探している場合、または後で忘れた場合に備えて、これを投稿すると考えました =)。

于 2013-10-15T19:06:21.293 に答える