1

アプリの使用中に電話がかかってくると、上部に通話ステータス バー用のスペースを確保するために、ビューが少し下に移動します。

呼び出しが終了すると、ビューはこの「変更された」状態のままになります。アプリのサイズを強制的に変更するにはどうすればよいですか? 現在、アプリを強制終了して再起動する必要があります。

4

1 に答える 1

2

オーバーライドするカスタム ビューはあります-layoutSubviewsか?

私の経験では、これは、カスタム レイアウトを使用するが、適切なタイミングで-layoutSubviews呼び出さないビューがあることを意味します。-setNeedsLayout:一般に、フレームを設定してもレイアウトは強制されません(自動レイアウトは別の方法で処理されます)。

をオーバーライドする任意のビューで-layoutSubviews、次のことを試してください。

-(void)setFrame:(CGRect)frame
{
  CGRect oldFrame = self.frame;

  // This check changes behaviour slightly:
  //   v.frame = v.frame;
  // no longer cancels animations.
  // Sometimes this works around an animation glitch.
  if (!CGRectEqualToRect(frame,oldFrame))
  {
    [super setFrame:frame];
    if (!CGSizeEqualToSize(frame.size,oldFrame.size))
    {
      // Only layout if the size changes.
      [self setNeedsLayout];
    }
  }
}

( for に対しても同じことができますが、-setBounds:AFAIK を除いて UIKit によって呼び出されないため、一般的には不要ですUIScrollView。)

于 2013-03-07T06:06:27.317 に答える