Stack View와 Navigation Controller을 이용해서 아래의 사진과 같은 로그인 + 회원가입 화면을 만들어보겠습니다.
![](https://images.velog.io/images/rlawnstn01023/post/a60fd053-067c-40c5-a752-1f67140eeb45/image.png)
[Stack 개념 설명]
![](https://media.vlpt.us/images/sbinha/post/17a3cf61-fb95-4970-b66c-92a71b99846b/Screenshot%202020-04-20%2019.07.55.png)
위의 사진을 보게되면 중앙에 모두가 알고 있는 Stack을 볼 수 있습니다. Stack은 FILO(First In, Last Out)
즉, 선입후출 - 먼저 들어간것이 가장 나중에 나오게 됩니다.
Push(삽입) : 스택의 구조상 제일 위에 있는 곳에 데이터를 저장(삽입)합니다.
Pop(삭제) : 스택의 구조상 제일 위에 있는 곳의 데이터를 삭제합니다.
[로그인과 회원가입에서의 Stack 설명]
로그인 화면에서 계정이 없으신가요? 라는 버튼을 누르면 회원가입 화면으로 넘어가는데 이 상황을 로그인 Stack위에 회원가입 Stack을 쌓는 라고 한다.
그리고 회원가입 화면에서 계정이 이미 있으신가요? 라는 버튼을 누르면 로그인 화면으로 넘어가는데 이 상황을 로그인 Stack위에 있는 회원가입 Stack을 삭제하는 Pop 한다.
![](https://images.velog.io/images/rlawnstn01023/post/4bc39c4c-19fc-426b-8fa3-2c0b02190486/image.png)
[실습]
1. ViewController -> LoginViewController로 변경
![](https://images.velog.io/images/rlawnstn01023/post/dc03ae32-2364-4bad-94df-131e0f67da2d/image.png)
2. Navigation Controller를 Main.Storyboard에 끌어놓고 기존에 있던 Table view는 삭제하고 아래의 사진과 같이 배치해준다.
![](https://images.velog.io/images/rlawnstn01023/post/a324dcbf-9501-4f9c-87d5-db64036d2356/image.png)
![](https://images.velog.io/images/rlawnstn01023/post/a88242f1-3160-4cab-b6f6-a6a8f563f5a3/image.png)
3. 기존 View Controller의 Class를 LoginView Controller로 바꾼다.
![](https://images.velog.io/images/rlawnstn01023/post/b6ecd590-3c07-4c10-ac11-2e65d392b519/image.png)
4. Ctrl을 누르고 Navigation Controller을 클릭해서 View Controller로 이어주고 Relationship Segue - root view Controller를 선택해준다.
5. image view를 LoginView Controller위에 놓고 사진을 하나 선택해준다.
![](https://images.velog.io/images/rlawnstn01023/post/babc6cfa-577b-4a8b-8319-0b9c6d0b4153/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.04.06.png)
![](https://images.velog.io/images/rlawnstn01023/post/d7bbb06f-6c1c-447a-9eec-cf10f17b6c76/image.png)
6. UIView를 Safe Area에 놓아주고 우리가 놓아준 사진을 해당 View 안에 넣어주고 그 View의 이름은 ContainerView라고 해준다.
![](https://images.velog.io/images/rlawnstn01023/post/af78bbe1-93a2-442a-a046-fae1d03d0a01/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.06.33.png)
![](https://images.velog.io/images/rlawnstn01023/post/830379b2-a011-4a16-a55e-ea229e048a04/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.09.20.png)
7. ContainerView의 4개의 방향 모두 Contraints를 0으로 해준다.
![](https://images.velog.io/images/rlawnstn01023/post/879e63ed-5fa9-45f5-a7b7-dc7401cf2c52/image.png)
8. 선택한 이미지는 다시 제자리로 놓고 Top방향으로 Contraints를 30으로 해주고, Horizontally in Container를 클릭해준다.
![](https://images.velog.io/images/rlawnstn01023/post/4515d229-0eca-4096-b354-3268b9ce5fb9/image.png)
![](https://images.velog.io/images/rlawnstn01023/post/bed91adc-8125-42e9-ae43-aa04f09884c1/image.png)
9. Text Field 2개 Button 1개를 일렬로 놓아주고 3개를 모두 선택한 상태에서 우측하단의 Embed In - Stack View를 선택해준다.
![](https://images.velog.io/images/rlawnstn01023/post/80b3004d-c165-4d42-adbd-694a2c92109e/image.png)
![](https://images.velog.io/images/rlawnstn01023/post/e93d17ba-9e86-4b20-a7b9-70ef8e1bfedb/image.png)
10. 위에서 만든 Stack View를 Bottom을 제외한 모든 방향을 Contraints를 20씩 해주고 각각의 Text Field와 Button은 좌우 방향을 Contraints를 0으로 해준다.
![](https://images.velog.io/images/rlawnstn01023/post/eb3bc77c-fb24-4418-be6d-bc28fb7e650c/image.png)
![](https://images.velog.io/images/rlawnstn01023/post/64268311-0cbb-4aaf-b5d5-caef2c97b189/image.png)
11. Button의 텍스는 로그인으로하고 배경색과 글자색은 커스텀해주고 각각의 placeholder에 Text Field1은 이메일, Text Field2는 비밀번호 적어준다.
placeholder(입력 힌트) : 사용자가 값을 입력하기 전에 입력값에 도움을 줄 수 있는 짧은 힌트를 입력 상자에 표시해주는 것이다. -> 사용자가 값을 입력하면 문자는 사라지게 된다.
![](https://images.velog.io/images/rlawnstn01023/post/9339bc18-8395-455d-bf17-4e65d10bb067/image.png)
12. Stack View의 Alignment: Fill / Distribution: Fill Equally / Spacing: 20으로 해준다.
![](https://images.velog.io/images/rlawnstn01023/post/e0261fb2-7793-4c60-93b0-7126493af171/image.png)
![](https://images.velog.io/images/rlawnstn01023/post/0183256d-6ed2-45fb-9c97-a468c028ce56/image.png)
14. New File - Swift File - RegisterViewController.swift를 만들어주고 클래스 이름도 바꾸어주고 New Group을 누르고 그 이름은 Controllers로 하고 Register와 Login을 넣어준다.
![](https://images.velog.io/images/rlawnstn01023/post/9b7e7290-8078-4c09-b0f8-852f45c13614/image.png)
15. Login View Controller를 복사 붙여넣기하고 클래스 이름은 RegisterViewController로 바꾸어준다.
![](https://images.velog.io/images/rlawnstn01023/post/9172f6b8-8c65-410d-906d-30b1bff2bf98/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-09-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%201.40.55.png)
16. 아래의 사진과 같이 Login View Controller를 만든거 처럼 바꾸어준다. 그리고나서 동영상처럼 Ctrl + 계정이 없으신가요? 버튼을 누른 상태에서 RegisterViewController를 드래그하고 Show를 선택해준다.
![](https://images.velog.io/images/rlawnstn01023/post/f56dea8a-4ed5-490d-bd07-2a7a921c5c52/image.png)
https://youtu.be/RT-zX9wZaGI
[나의 활용]
나는 오늘의 집 화면에서 깃발Button과 장바구니Button을 Navigation Controllerr과 bar button item을 이용해서 나타내었다.
![](https://images.velog.io/images/rlawnstn01023/post/60acf354-b84e-473c-b6f8-975cba060056/image.png)
위의 이미지에서 우측상단의 깃발과 장바구니를 말하는 것이다. 아래의 사진과 같이 구현했다!! 아직 이미지 크기는 수정하지 못했는데 수정하면 다시 글을 수정하겠다.
![](https://images.velog.io/images/rlawnstn01023/post/1ea11b89-620d-47a9-b265-5da10f91e4f1/image.png)
아 그리고 이미지를 선택해서 실행을 했을 때 이미지에 파란색만 나오는 경우가 있는데 그 부분은 Assets.xcassets에서 해당 이미지를 선택하고 Remder As - Original Image를 선택하면 해결된다!
+수정) 사진 이미지 크기는 Assets.xcassets에서 1x에 있던 사진을 3x로 옮기니깐 되었다!!