2017-04-14 7 views
0

​​スウィフトUIStackView - セル間のダイナミックビューハイツ大きな間隔は、プログラム

私は、動的に所定の位置にフォームを挿入するために、プログラムでUIStackViewで働いています。ボタンが押され、UIViewが0の位置に挿入されます。ユーザーがフォーム上でsaveをクリックすると、制約がワイプされ、セルが削除され、ディスプレイUIViewに置き換えられます。置き換えられるUIViewは、フォーム内部から記録されたテキストの量に基づいて可変の高さにすることができます。

問題は、最初のセルに長いテキストがあり、2番目のセルに短いテキストが入力されていて、2つのセルがフラッシュされていない場合です。高さが同じ場合、これは発生しません。したがって、最初のセルの高さが2番目のセルの高さと等しい場合、3つのセルはすべて上に表示されます。

上記の図は、私の問題と私が達成したいことを示しています。これをどうやって解決するのですか?

また、私は私の制約に関しては、以下の出力を見ています:

LayoutConstraints] 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. 
(
"<NSLayoutConstraint:0x61000028ac80 MyApp.StepView:0x7fdf4b74b360.height == 166 (active)>", 
"<NSLayoutConstraint:0x6100002870d0 MyApp.StepView:0x7fdf4b678da0.height == 166 (active)>", 
"<NSLayoutConstraint:0x61000028db10 'UISV-canvas-connection' UIStackView:0x7fdf4e8012d0.top == MyApp.StepView:0x7fdf4b74b360.top (active)>", 
"<NSLayoutConstraint:0x610000289d80 'UISV-canvas-connection' V:[MyApp.StepView:0x7fdf4b678da0]-(0)-| (active, names: '|':UIStackView:0x7fdf4e8012d0)>", 
"<NSLayoutConstraint:0x61000028a820 'UISV-spacing' V:[MyApp.StepView:0x7fdf4b74b360]-(15)-[MyApp.StepView:0x7fdf4b678da0] (active)>", 
"<NSLayoutConstraint:0x61800009acc0 'UIView-Encapsulated-Layout-Height' UIStackView:0x7fdf4e8012d0.height == 770 (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6100002870d0 MyApp.StepView:0x7fdf4b678da0.height == 166 (active)> 

これはかなりカスタム設計、あなたの典型的なモバイルレイアウトのような何もないです。私はUIStackViewを捨てて、制約を使うほうが良いのではないかと思います。 UIStackViewは、サイジングを修正して要素を追加/削除できるようにしたいと考えていたので、私は思った。

答えて

0

私は、スタックビュー内のすべてのセルを測定することで、望ましい結果を得る方法を見つけました。値が500未満だった場合は、空白のセルをスタックの最上部に押し込んだ。これにより、他のすべての細胞が整列しているように見えるようになりました。

私は基本的にStackViewを毎回再構築していたので、このアプローチが最も理にかなっていました。

関連する問題