0

のビューに追加するカスタムボタンがいくつかあります-viewDidLoad。次のように、ビューの内側で垂直方向の中央に配置する必要があります。

self.customButton.center = CGPointMake(98.f, self.view.center.y);

ただし、ビューの高さは504.03.5インチのデバイスでも同じであり、416(480-20(ステータスバーの高さ)-44(ナビゲーションバーの高さ))と予想されます。

xibのビューは「Retina4Fullscreen」を使用していますが、フリーフォームに設定しても効果はありません。私は確かに高さの違いを説明するためだけに2つのxibを望んでいません。

UIScreenを使用できることは知っていますが、ビューが高さの違いを認識していることを望んでいます。

編集:奇妙なことに、では-viewWillAppear、ビューの高さが正しく設定されてい416.0ます。これが後で処理されない理由は[super viewDidLoad]私を超えています。

人々はこれをどのように扱っていますか?Autolayoutはおそらくこれを処理しますが、iOS5互換の方法が必要です。自動サイズ変更はどういうわけか「センタリング」を処理できますか?

4

2 に答える 2

8

iOS5には自動レイアウトはありませんが、自動サイズ変更マスクはあります。ビューをIBの垂直方向の中央に配置し、インスペクターに移動して、自動レイアウトマスクの垂直支柱とスプリングの選択を解除すると、ビューは4"と3.5"の両方の画面で垂直方向の中央に配置されたままになります。

または、viewDidLoadメソッドのコードでこれを行うことができます。現在のようにビューを中央に配置し、autoresizingMaskを次のように設定します。

 self.customButton.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | \
                                       UIViewAutoresizingFlexibleTopMargin);
于 2013-03-08T03:49:05.290 に答える
1

編集:奇妙なことに-viewWillAppear、ビューの高さは416.0に正しく設定されています。これが後で処理されない理由は[super viewDidLoad]私を超えています。

ビューのサイズ変更はビューの読み込みの一部ではないためです。おそらく次のようなメソッドで-viewDidLoadから呼び出されます。-view

-(UIView*)view
{
  if (!_view)
  {
    [self loadView];
    [self viewDidLoad];
  }
  return _view;
}

-(void)loadView
{
  // Some code to load the view from a nib/storyboard...
}

ビューは、のような呼び出しでサイズ変更されますが、これは、ビューがロードされた後(したがって、呼び出されたyourViewController.view.frame = ...)にのみ発生する可能性があります。-viewDidLoad

いくつかの自動サイズ変更マスクを設定します。それが彼らの目的です。

于 2013-03-08T04:20:24.333 に答える