ラベルとボタンがたくさんあるシーンがあります。ボタンをタップすると、コントロールを含むビューが下から上にスライドします。いわばキーボードのようなものです。次のように「見えます」:
-----------------------------
| |
| [Button 1] [ Slider 1 ] |
| |
| [Button 2] [ Slider 2 ] |
| |
-----------------------------
この「キーボード」は、ビューがロードされ、アニメーションが完了し、その高さを 0 から固有のコンテンツ サイズに切り替える最初の段階で作成されます。この escene はランドスケープ モードのみをサポートし、デバイスが 180 度回転したときに "キーボード" をビューに表示し続けるのにかなりの時間がかかりました。
私が見る問題は、次の 2 つの状況のいずれかで発生します。
- デバイスは 180 度回転します。
- 「キーボード」と呼ばれます。
この問題は次のとおりです。
Unable to simultaneously satisfy constraints...
.
.
.
.
(
"<NSLayoutConstraint:0x718c6c0 UIButton:0x717e0d0.centerY == UISlider:0x717d9d0.centerY>",
"<NSLayoutConstraint:0x7190a00 UIButton:0x717e0d0.centerY == UISlider:0x717d9d0.centerY>"
)
エラー ログには、ボタン スライダーのセットごとに 1 回ずつ、このエラーが 2 回表示されます。
私が奇妙だと思うのは、矛盾する制約がまったく同じであることです。コピペミスをして同じ制約を2回追加したと思ったのですが、そうではありません。
回転時に updateViewConstraints が呼び出されることと、アニメーションを実行することと関係があると思いますが、この「キーボード」ビューには他にもいくつかあるため、これらの制約のみが影響を受ける理由はわかりません。
結局のところ、この Autolayout は、Apple が主張するよりもかなり難しいものです。もちろん、私の意見では。
何か案は?
編集: 制約はすべて、主にビジュアル言語形式を使用してコードで設定されます。「キーボード」内のコントロールの制約は、「キーボード」ビューに追加されます。これは通常行うことだと思います。
試してみるために、問題のある制約を変更し、それらを「キーボード」サブビューに追加する代わりに、self.view (「キーボード」スーパービュー) に追加しました。突然、エラーが表示されなくなりました。
それにもかかわらず、何が問題なのかまだわからず、幸運なショットを打っただけなので、この問題について議論したいと思います. 私は本当にそれを理解したいです。