HoonStyle

modal UIViewController와 SafeArea 본문

Programming/IOS

modal UIViewController와 SafeArea

HoonStyle 2018. 6. 22. 16:53

모달로 띄워진 ViewController를 pan Gesture로 View를 이동하는경우...


필자는 storyboard와 autolayout을 사용하여 진행을 하고있다.

full screen이 아닌(full screen이 맞기는 하다.. 실제 보여지는 화면이 full screen처럼 안보이게 하는게 목적이다.)View를 modal로 띄우는 관계로 safearea를 기준으로 layout을 지정을 했고 pan gesture를 사용하여 view를 이동을 하였다.


이동은 잘 되고있으나 문제가 있었으니...

view가 이동을 시작하면 safearea의 값이 0으로 변경된다. (아이폰X제외 20)

이때문에 이동하는 view의 시작점이 y = 20 이 아닌 y = 0부터 시작을 하게 되어 부자연스러운 이동이 된다.

물론 view가 원점으로 modal로 돌아가는경우에는 다시 safearea의 값은 정상으로 돌아온다.



문제점...


1. safearea까지 사용하지 않는 view를 modal로 띄워야한다.

2. view가 이동시 safearea의 값이 0으로 바뀐다.

3. 일반적인 아이폰은 상단에만 safearea가 있지만 X는 상단,하단 두군데 있으며 간격또한 다르다.

4. 차후에 다른아이폰이 출시되어 safearea의 값이 다를 수 있기 때문에 case를 만들어 노가다 하기 싫다.(새로운 case마다 노가다..)



해결...


1. safearea를 없애고 그자리에 view를 넣어 safearea역할을 하게끔 만들어 주면된다. X는 safearea가 상,하단이니 위아래로 넣어준다.

2. 초기값은 0으로 설정하고 view가 생성될때 safearea값을 가져와 대신 채워준다.



아래는 safearea값을 가져오는 샘플..

override func viewDidLayoutSubviews() {

        var topSafeArea = CGFloat()

        var bottomSafeArea = CGFloat()

        

        if #available(iOS 11.0, *) {

            topSafeArea = view.safeAreaInsets.top

            bottomSafeArea = view.safeAreaInsets.bottom

        } else {

            topSafeArea = topLayoutGuide.length

            bottomSafeArea = bottomLayoutGuide.length

        }       

        

    }






다른 케이스는 전혀 문제가 없었는데 view를 이동시키니 이난리....

결국 safearea 때문에 이 난리를 해야하는것...




'Programming > IOS' 카테고리의 다른 글

Storyboard로 UIScrollView 설정  (0) 2018.06.26
IOS 개발자 인증서 갱신 방법  (1) 2018.06.25
UIImagePickerController  (0) 2018.06.18
IOS 구버전 테스트 방법  (0) 2018.03.03
Xcode device target build 방법.  (0) 2015.12.30