0

進行状況の HUD を表示するために、小さな UIView サブクラスを作成しました。その HUD ビューは完璧に機能しますが、ここ数日でちょっとした問題に直面しました。

私のアプリケーションでは、カスタムの方法で UIViewController を提示しています。ユーザーがtableViewで行を選択すると、2番目のviewControllerのインスタンスを作成し、それを現在のVCに移動し、ビューの高さをゼロに設定し、現在のVCのビューのサブビューとして追加します(選択したセル)、高さをアニメートして元に戻します。

動作はかなりクールに見え、うまく機能します。

しかし、2 番目のビューがサブビューとして追加されると、このビューに HUD が追加されます。2 番目のビューが元の高さにサイズ変更されると、HUD はビューの上部に固定され、高さはわずか数ピクセルになります。 ここに画像の説明を入力

私は NSLayoutConstraints を少しいじってみました...しかし、今までうまくいきませんでした...

誰かがそれについて良い考えを持っていますか? または、これらの制約に関する適切で十分に説明されたリソースを知っている人はいますか?

HUD は、実際にはサブビューとして小さなウィンドウを持つバックグラウンド ビューです。他のすべての要素 (進行状況ビュー、ラベルなど) は、小さなウィンドウのサブビューです。

4

1 に答える 1

0

優れたリソースという点では、WWDC2012 の 3 つのビデオ (OSX/iOS の自動レイアウトの紹介、例による自動レイアウト、および自動レイアウトをマスターするためのベスト プラクティス) を強くお勧めします。これらには、レイアウトのあいまいさを調べて競合に対処するためのヒントがいくつかあります

もう 1 つの優れたリファレンスは、Erica Sadun の iOS6 レシピ本です。

あなたの問題を再確認してください。エラー メッセージは表示されておらず、進行状況 HUD はすべて XIB 内にレイアウトされていると思います。もしそうなら、xib から望むように動作していない 2 つの制約があるように聞こえます - superView の上部からの高さと HUD の高さ

最初に、.h ファイルへの制約のアウトレットを作成します。

@property (strong) IBOutlet NSLayoutConstraint *HUDSuperViewToHUDConstraint;
@property (strong) IBOutlet NSLayoutConstraint *HUDHeight;

次に、HUD で新しい viewController を開くメソッドで、最初に新しいビューを表示するときに競合が発生しないように、制約を削除します。

[HUDSuperView removeConstraint:self.HUDSuperViewToHUDViewConstraint];
[HUDSuperView removeConstraint:self.HUDHeight];

[HUDSuperView layoutIfNeeded] を初めて呼び出した後、アニメーションまたは任意の場所で、制約を追加して、layoutIfNeeded を再度呼び出します。

[HUDSuperView addConstraint:self.HUDSuperViewToHUDViewConstraint];
[HUDSuperView addConstraint:self.HUDHeight];
[HUDSuperView layoutIfNeeded];

animateWithDuration 内でこれらを呼び出すと、外観をアニメーション化することさえできます...安っぽい

これがお役に立てば幸いです。おそらく、ソリューション自体というよりも、ソリューションに向けた一歩だと思います。AutoLayout by Example ビデオでも 17 分と 53 分をお勧めします。

スティーブ

于 2013-02-09T15:13:49.280 に答える