오토레이아웃의 내부에는 컨스트레인트가 안걸린다는걸 발견했다.
위 사진에는 부모요소라 할 수 있는 오토레이아웃을 선택했을 때 constraint가 잘 살아있지만 이것이 무엇에 대한 컨스트레인트인지 모르는 상태다. 원래 아래처럼 자신이 속해있는 프레임에 대해서 어느 선분 기준으로 constraint가 걸려있는지 알아야 한다.
위 사진은 사각형 안에 사각형을 선택했을때 나오는 정보로, 어느 면에 어떤 기준으로 컨스트레인트가 되어있나 확인할 수 있다. 확인을 할 수 없으니 추론을 해보면 된다. 맨 아래에 사진으로 문제 3번 오토레이아웃은 어디에 걸려있나 알아낸 사진이 있다.
어쨌든, 오늘 포스트의 목적은 오토레이아웃 내부에서 왜 오토레이아웃 프레임에 대해 컨스트레인트가 안걸리는지, 어떻게해야 걸 수 있는지 알아내는 것이다. 아래 사진을 보자.
우측 특성창을 보면 컨스트레인트 정보가 없는 것을 확인할 수 있다. 내 추론이라면, 사각형은 해당 오토레이아웃에 대해 컨스트레인트가 있음을 표시하는게 맞다고 본다.
1. 오토레이아웃 자체가 내부 요소들에 대해 자동정렬하는 것이라 컨스트레인트가 아닌 resizing이 존재한다(둘은 동시에 존재할 수 없다).
2. 오토레이아웃 내 사각형이 오토레이아웃에 컨스트레인트함은 조절할 수 없는 것이라 뺐다.
3. 컨스트레인트는 프레임과 요소 사이에서만 작동한다.
위 사진은 살구색 프레임 안에 들어간 사각형을 선택했을때 보이는 정보로, 컨스트레인트가 바로 뜨는 것을 확인할 수 있다. 기준도 살구색 프레임 기준이다.
그런데, 지금까지 오토레이아웃은 프레임이라고 알고 있었다. 다만, 이럴땐 컨스트레인트를 내부로 정할 수 없는 특수한 프레임이라고 생각하면 될 거 같다.
마지막으로, 오토레이아웃 자체의 컨스트레인트 정보가 점선으로 표시되지 않는 건에 관해 조사한 사진이다.
위에 사진이 제일 큰 (가로로 긴) 오토레이아웃을 이동하기 전, 아래 사진은 제일 큰 오토레이아웃을 이동한 후이다. 안에 모든 문제 $n번 오토레이아웃이 다 따라옴을 알 수 있으며, 큰 오토레이아웃에 작은 오토레이아웃이 컨스트레인트가 걸린 것을 확인할 수 있다.
문제는, 이러면 앞선 3번 추론에 걸린다. 프레임-요소(오토레이아웃도 포함) 이어야만 컨스트레인트가 걸린다는 가설인데, 문제의 오토레이아웃이 가장 가까운 프레임에 걸렸을 수도 있다.
그러면, 오토레이아웃은 프레임이 아닌가?