removeFromSuperview()をした場合の動きについて


ベースとなるViewを生成し、その上に機能に応じたUIパーツを`addSubView()`します。  
その後機能を変えた場合はベースとなるViewの上のUIパーツを全て`removeFromSuperview()`してから値を再設定し`addSubView()`という処理を行ったのですが、  
再設定後の表示が画面の左上にUIパーツがまとまった状態になり、Debug View
Hierarchyで確認するとRuntimeErrorに以下のエラーが出ていました。

[code]

    Layout Issues 
       -> Position is ambiguous for UILabel
    
[/code]

StoryBoard上でAutoLayoutは設定はしてあります。  
なので、再設定をしない初回は正しく表示されます。

`removeFromSuperview()`をした場合、インスタンスは解放されずViewとの繋がりが絶たれるだけだという認識でいたので、制約が解除されるという想定はしていませんでしたが、  
UIパーツの制約が解除されてしまうということはあるのでしょうか？




AutoLayoutは隣接する他のビューや、superViewとの相対的な関係を表すものですので、`removeFromSuperView()`メソッドでビューを外した場合、たいていは制約の整合性が崩れて、書かれたような制約のエラーが起こります。  
ビューを実行時に外したり追加したりなど、構造を変えた場合は制約も合わせて変更する必要があります。  
実行時にコードでAutoLayoutの制約をビューに合わせて変更するのは面倒なので、可能なら別の構成のビューを用意しておいて、表示を切り替える、などとする方が簡単だと思います。

