Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 스프링
- jQuery
- ios
- iOS앱배포
- iOS배포
- DispatchGroup
- customclass
- FileOwner
- 웹
- Xcode
- 자바스크립트
- FLASK
- JavaScript
- 앱배포
- spring
- 개발기록
- subscript
- 딩동말씀
- 앱버전구하기
- 스위프트
- 맥
- 계산기앱만들기
- iOS계산기
- 파이썬서버
- AJAX
- Python
- MainScheduler
- Xib
- Swift
- 계산기앱
Archives
- Today
- Total
개발하는 뚝딱이
[iOS] view's layout behavior 본문
뷰 컨트롤러에 서브뷰를 추가했을 때 종종 레이아웃에 관련하여 문제가 발생하곤 합니다.
viewDidLoad()에서 서브뷰의 프레임이 변경되거나, 레이어를 추가해줄 때, 코드로 뷰를 추가하는 등의 행동이 의도대로 실행되지 않을 때가 종종 있습니다.
뷰 컨트롤러의 viewDidLoad()가 실행되는 시점은, 뷰가 생성되어 메모리에 할당되었을 뿐 뷰 계층구조에 뷰가 추가되지 않았기 때문입니다. 이참에 뷰의 레이아웃에 관련된 메서드를 모두 정리해보았습니다.
뷰 컨트롤러에 대해 알아보기 ⏩ ttuk-ttak.tistory.com/73?category=917081
UIViewController의 생명주기
viewDidLoad(_:) 뷰가 메모리에 할당되었을 때
viewWillAppear(_:) 뷰가 계층구조에 추가되기 직전에
viewDidAppear(_:) 뷰가 계층구조에 추가된 후
viewWillDisappear(_:) 뷰가 계층구조에서 삭제되기 직전에
viewDidDisappear(_:) 뷰가 계층구조에 삭제된 후
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("[1] View Did Load")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("[1] View Will Appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("[1] View Did Appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("[1] View Will Disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("[1] View Did Disappear")
}
@IBAction func showNextViewController(_ sender: UIButton) {
guard let nextVC = storyboard?.instantiateViewController(identifier: SecondViewController.identifier) else { return }
self.present(nextVC, animated: true, completion: nil)
}
}
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("[2] View Did Load")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("[2] View Will Appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("[2] View Did Appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("[2] View Will Disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("[2] View Did Disappear")
}
@IBAction func close(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
}
앱을 실행시켰을 때, ViewController가 실행됩니다.
아래와 같이 결과가 콘솔창에 출력됩니다.
[1] View Did Load
[1] View Will Appear
[1] View Did Appear
첫번째 뷰에서 버튼을 눌러, SecondViewController가 호출됩니다.
[1] View Did Load
[1] View Will Appear
[1] View Did Appear
// 새로 찍힌 로그들
[2] View Did Load
[2] View Will Appear
[2] View Did Appear
SecondViewController의 버튼을 눌러 뷰 컨트롤러를 닫아주었습니다.
[1] View Did Load
[1] View Will Appear
[1] View Did Appear
[2] View Did Load
[2] View Will Appear
[2] View Did Appear
// 새로 찍힌 로그들
[2] View Will Disappear
[2] View Did Disappear
'iOS' 카테고리의 다른 글
[iOS] 앱 버전 구하기 (0) | 2022.01.20 |
---|---|
[iOS] 커스텀 뷰 생성하기, CustomClass와 File's Owner (0) | 2021.08.14 |
유용하게 사용하는 사이트, 라이브러리 모음 (0) | 2021.03.02 |
기억 안날 때를 대비한 링크 모음 (0) | 2020.10.12 |
[iOS] Core Graphic 기본 용어 정리 (0) | 2020.05.15 |