2

3 つの UIViewControllers がモーダルに重ねて表示されています。3 つ目は、MFMailComposeViewController を開き、電子メールを送信します。ただし、そのView Controllerを閉じた後、他のView Controller(必ずしもView Controllerのチェーン内にあるとは限りません)のさまざまなコントロールが移動しました。

たとえば、MFMailComposeViewController を閉じた後、親 ViewController のラベルの 1 つが約 20px 下に移動しました。親のスクロールビューも同じ量だけ下に移動しました。ここから別のView Controllerに入ると、imageviewがずれます。それらは常に画面の上部にあるコントロールのように見え、画面ごとに 1 つだけです。

誰もこれを見たことがありますか?私はすべてのコードをチェックしましたが、それを引き起こしている可能性のあるものは何もありません。これらのコントロールが場違いに表示されるのを防ぐために、画面が表示されるたびにこれらのコントロールのフレームをリセットする必要があります。しかし、それは私には意味がありません。

ありがとう。

4

2 に答える 2

1

親View Controllerから提示しようとしましたか?? 同様の問題があり、問題を修正しました。

于 2012-10-09T00:09:52.393 に答える
0

どういうわけか、レイアウトがランダムに発生していないようです。試してみるべきいくつかのことを考えることができます:

  • 特にor-layoutIfNeededのような場所では、 を明示的に呼び出していないことを確認してください— ビュー ツリー全体のレイアウトが発生する可能性があり、レイアウトが既に発生している場合、間違った動作をする傾向があります (iOS 5 では、一貫性のないレイアウトが発生する可能性があります。 iOS 6 レイアウト ループに陥っているのを確認しました)。また、副作用としてレイアウトを実行するいくつかのメソッドについても注意する必要があります (頭に浮かぶ — 修正は、ビューを階層に追加する前に呼び出すことです)。-setFrame:-sizeThatFits:UIButton.titleLabel
  • 自動サイズ変更を使用している場合は、機能するはずです。ただし、フレームが変更されたときにビューがウィンドウに関連付けられていない場合、機能しないことがわかりました。
  • でレイアウトを行っている場合は-layoutSubviews、オーバーライド-setFrame:して を呼び出します-setNeedsLayout。通常の症状は、「タブを切り替え、回転させ、元に戻す」と正しくないレイアウトになることです。
于 2012-10-09T02:48:20.053 に答える