2

私は2つのビューを持っています。MapKitView と UILabel。自動レイアウトがオンになっています。

MKView が画面全体を占めるようにし (これは正常に動作するようです)、UILabel が画面の下部からの自動距離のままであるが、水平方向に中央に配置されるようにします。UILabel の内容はプログラムで変更され、その後sizeToFit.

UILabelを呼び出しsizeToFitた後、中央に配置されなくなりました。幅は右側 (トレーリング エッジ) からのみ調整され、左側が一定の位置に保たれているようです。

私の理解では、IBで適切な制約を設定するだけで、私が望むものを達成できるはずですか?

ラベルに適用した制約は次のとおりです。

Height Equals: 32
Width Equals: 166
Bottom Space to: Superview Equals: Default
Align Center X to: Map View

最後の「Align Center X」だけがユーザー制約で、残りは IB が提供します。

私は多くのことを試しましたが、あまり理解していませんでした (おそらく私の問題です!)。

setTranslatesAutoresizingMaskIntoConstraints: NOラベルに電話しました。ラベルの を設定しましたautoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMarginpreferredMaxLayoutWidthランダムな値に設定してみました。needsUpdateConstraintsラベルを呼び出します。への呼び出しを入れてみsizeToFitましたviewDidLayoutSubviews

私は、これにどのようにアプローチすべきかをもう少し理解する必要があるという結論に達しました。Auto Layout がオンのときに呼び出すものではsizeToFitないでしょうか。を呼び出した後、何らかの方法で自動レイアウトを作成する必要がありsizeToFitますか? シミュレーターを回転させるとラベルが中央に表示されるように見えるので、突っ込む可能性があることに気付きましたか?

Apple Auto Layout ガイドを読み直しましたが、何が間違っているのかまだわからず、提案されたデバッグのヒント (visualizeConstraints など) が iOS では機能しないようです。

余裕のある手がかりをありがとう。

4

1 に答える 1

2

プロドしなければならないという私の考えは正しいようです。電話した後、電話sizeToFitする必要がありました[label.superview setNeedsLayout]。これは機能しますが、サイズが変更されたときにレイアウトをダーティとしてマークするラベルではなく、手動でこれを行う必要がある理由がよくわかりません。

于 2013-03-16T22:19:43.913 に答える