1

簡単に言えば、UILabel を画面の上部から 150pt になるように配置したいと考えています。これにより、4 インチ iOS デバイスまたは 3.5 インチ iOS デバイスの両方で、上部から適切な距離を保つことができます。

ただし、[self.navigationController setNavigationBarHidden:YES animated:NO];ナビゲーションバーを使用するとすぐに非表示になり、ビューのサイズが変更されて高くなります。これにより、UILabel が上にジャンプしますが、これは望ましくありません。それは、ユーザーが全画面表示にしたいときであり、この場合、物事が飛び回ってはいけません。

ビューの下部から制約を作成します。これは理論的には機能しますが、UILabel が iPhone 5 の画面から離れすぎてしまいます。値をハードコーディングすることはできますが、それは自動レイアウトの精神に沿うものではないようです。

基本的に、完璧な解決策は、制約をビューではなく画面の上部に設定できるようにすることです。このようなことは可能ですか?そうでない場合、どうすればこれを行うのが最善でしょうか?

4

3 に答える 3

2

上部の制約にIBOutletを作成し(私の例ではそれをtopConと呼びます)、非表示または再表示するときに、制約の定数からバーの高さを加算または減算します。

- (IBAction)hideNavBar:(UIButton *)sender {
    self.navigationController.navigationBarHidden = !self.navigationController.navigationBarHidden;
    if (self.navigationController.navigationBarHidden) {
        self.topCon.constant = self.topCon.constant + self.navigationController.navigationBar.frame.size.height;
    }else{
      self.topCon.constant = self.topCon.constant - self.navigationController.navigationBar.frame.size.height;
    }
}

これは、ナビゲーション バーの高さが異なるポートレート モードとランドスケープ モードの両方で正しく機能します。

于 2013-08-02T00:55:02.527 に答える
0

残念ながら、AutoLayout は画面ではなくビューを扱います。ここにいくつかの解決策があります:

1: layoutsubviews (または同様のトリガーが実行される) たびに、自分で再配置すると言えます。

2: 高さを可変に設定して、利用可能な場合にたるみを取ることもできます。

3: 下部から固定され、上部まで塗りつぶされるビューを追加します (ビューを調整して同じサイズまたは変更を維持し、このラベルを制約付きでこのビューの上部に追加できます)。

于 2013-08-02T00:43:36.047 に答える
0

ナビゲーション バーの高さ (self.navigationController.navigationBar.frame.size.height) を使用して、ナビゲーション バーの非表示/表示に応じて UILabel を上下に移動しないのはなぜですか?

この方法では、何もハードコーディングせず、UINavigationBar プロパティを使用しています。

于 2013-08-02T00:41:03.670 に答える