2

Androidレイアウトのように、ビューを相互に配置する方法はありますか?

例:可変長の文字列に動的に設定される2つのUILabelが上下にあり、トップラベルの行数に関係なく、ボトムラベルをトップラベルの最後の行のすぐ下に表示する必要があります。 。

別の例:上記と同じ状況ですが、ラベルの1つが非表示になっている場合があります。結果のラベルは、1つのラベルであるか2つのラベルであるかに関係なく、親の垂直方向の中央に配置する必要があります。

Androidのリニアレイアウトと相対レイアウトを使用すると、これを非常に簡単に行うことができますが、これを行う方法がiOSであることがわかりません。できますか?

4

2 に答える 2

0

ずっと可能かと探していました。私の知る限り、今のところそれは不可能です。これをどこで読んだかは覚えていませんが、ios6で可能になります。Androidのリニアレイアウトを使用する代わりに、sizeWithFontメソッドを使用してサイズを検出UILabelし、フレームを設定して配置することができます。まず、フォントファミリに従ってサイズを見つけるために、もちろんテキストを設定する必要があります。あなたが使うことができるもう一つのことはsizeToFit方法です。残念ながら、使い方がわかりません。あなたは、しかし、ショットを与えることができます。その時、私はこれを見つけました。多分、あなたはそれを使うことができますhttps://github.com/scalessec/CSLinearLayoutView

于 2012-08-29T15:33:52.153 に答える
0

iOS6のAutoLayoutを使用してこれを行うことができます。6.0より前のiOSで実行する必要があるアプリケーションの場合、自分で実行する必要がありますが、これはそれほど複雑ではありません。

実際、私はこれを行うためのクラスを実装しました(それはずっと前のことですが、それでも機能することを願っていますが、そうしない理由はありません)。このOHStackViewクラスは、UIViewサブビューを水平または垂直に自動的にレイアウトして、それらをスタックまたは整列するサブクラスです。

OHStackViewサブビューを水平または垂直に(上下に重ねるなど)積み重ねたり、上下左右の境界線や中央を揃えたり、各サブビューの間にパディングを指定したりするように依頼できます。サブビューの1つがフレームまたはサイズを変更するたびに、OHStackView依存するすべてのビューを自動的にリレーアウトして、すべてを再調整します。 (たとえば、2つのUILabelを使用sizeToFitして、ラベルを呼び出してコンテンツに合わせてサイズを調整するだけで、すべてが自動的に中継されます)

提供されているサンプルプロジェクトがありますので、お気軽にテストしてください。

注:IIRC、私のサブクラスはサブビューの「隠し」プロパティを考慮していません。ただし、実装のループのようif (v.hidden) continue;に条件を追加して、レイアウトアルゴリズムで非表示でないビューのみを考慮に入れることで、この動作にサポートを簡単に追加できます。forlayoutSubview

HTH

于 2012-08-29T16:04:15.133 に答える