1. ホーム
  2. ios

[解決済み] UIStackView "潰れた "隠しビューの「制約を同時に満たすことができない」問題について

2023-01-16 03:31:17

質問

UIStackViewのquot;rows"が潰れた場合、以下のようなエラーが発生します。 AutoLayout の警告が表示されます。しかし、それらは問題なく表示され、これらの種類のログ以外には何も問題ありません。

制約を同時に満たすことができません。 おそらく、次のリストにある制約のうち少なくとも1つは、必要ないものです。これを試してみてください。(1)それぞれの制約を見て、どれが期待しない制約かを見つけ出してください。(2)不要な制約を追加したコードを見つけ、それを修正してください。(注意: もし、あなたが NSAutoresizingMaskLayoutConstraints が表示されている場合、その制約のためのドキュメントを参照してください。 UIView プロパティ translatesAutoresizingMaskIntoConstraints ) (

というわけで、これを修正する方法はまだわかりませんが、ただうっとうしいだけでなく、何も壊さないようです。

誰かこれを解決する方法を知っていますか?興味深いことに、レイアウト制約には、かなり頻繁に 'UISV-hiding'です。 でタグ付けされており、おそらくそれはこのインスタンスでサブビューまたは何かのための高さの最小値を無視する必要があることを示しています。

どのように解決するのですか?

この問題は、サブビューを UIStackView からサブビューを非表示に設定するとき、それをアニメーション化するために、まずその高さをゼロに拘束するためです。

以下のようなエラーが出ていました。

2015-10-01 11:45:13.732 <redacted>[64455:6368084] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f7f5be18c80 V:[UISegmentedControl:0x7f7f5bec4180]-(8)-|   (Names: '|':UIView:0x7f7f5be69d30 )>",
    "<NSLayoutConstraint:0x7f7f5be508d0 V:|-(8)-[UISegmentedControl:0x7f7f5bec4180]   (Names: '|':UIView:0x7f7f5be69d30 )>",
    "<NSLayoutConstraint:0x7f7f5bdfbda0 'UISV-hiding' V:[UIView:0x7f7f5be69d30(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f7f5be18c80 V:[UISegmentedControl:0x7f7f5bec4180]-(8)-|   (Names: '|':UIView:0x7f7f5be69d30 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

私が行おうとしていたのは、このように UIView の中に UIStackView を含んでいた UISegmentedControl が入っていて、各辺に8ptsずつ挿入されています。

非表示にすると、コンテナビューの高さをゼロにしようとしますが、私は上から下まで一連の制約を持っているので、競合が発生しました。

問題を解決するために、8pt の上下制約の優先順位を 1000 から 999 に変更しました。 UISV-hiding 制約が必要な場合に優先されるようにしました。