[Swift] addChild의 frame 문제

addChild한 ViewController 에서 위치나 크기가 이상하다면..?

naljin
4 min readAug 5, 2020

문제

아니 나는 이렇게 하면 childView가 add 되는 줄 알았지~~~

func goToChildView() {// .loadFromNib()은 nib 에서 initiate 하는 커스텀 함수
let childVC = ChildViewController.loadFromNib()
self.addChild(childVC)//단순한 addSubView는 부모-자식 관계 성립 안함
self.view.addSubview(childVC.view)
//code 로 작업하면 didMove 직접 호출해 줘야, childVC 에 있을 didMove override 함수가 동작할 수 있음
childVC.didMove(toParent: self)
}

하지만 내 뜻대로 될리 없지!

Xib에서 그린 것 (이상) / 실제로 나오는 것 (현실)

처음에 오른쪽 둥그렇게 잘리는게 안먹는 줄 알았다. 근데…. 자세히 보니까 label이 가운데가 아니라 좀 치우친거 같자나…?! 뷰가 잘리고 있는건가? ㅡㅡ 생각이 들기 시작함.. ㅎㅎ

그래서 오른쪽에 족구마난 빨간색 뷰를 올려놓고 다시 띄워봤더니..!

Xib에서 그린 것 (이상) / 실제로 나오는 것 (현실)

역시 뷰가 잘리고 있는 거였군 ㅎㅎ

해결

아니… 원래 코드에서는 잘 되는데 왜 나한테만 이런 일이 생기는걸까…(오열) 제거에선..안되는데요…?????????

하지만 이럴땐 당황하지 않고 childVCframe을 설정해준다! (사실 이미 많이 당황하고 삽질 거친 후임 ^^..)

childVC.view.frame = self.view.bounds

전체 코드

func goToChildView() {// .loadFromNib()은 nib 에서 initiate 하는 커스텀 함수
let childVC = ChildViewController.loadFromNib()
// frame 설정
childVC.view.frame = self.view.bounds
self.addChild(childVC)// 단순한 addSubView는 부모-자식 관계 성립 안함
self.view.addSubview(childVC.view)
// code 로 작업하면 didMove 직접 호출해 줘야, childVC 에 있을 didMove override 함수가 동작할 수 있음
childVC.didMove(toParent: self)
}

생성한 childVC 해제하는 방법이나 예제는 아래 링크를 참고하시길!

참고

--

--