2014년 4월 30일 수요일

[iOS7] UIViewController의 Adjust Scroll View Insets는?

 ScrollView를 전체 화면에 넣고, 이미지를 중앙에 보여주게 하였는데, 아래로 내리면, ScrollView의 위치가, Top Bar밑으로 자동으로 조정이 되어서, 이 기능을 빼는 것을 블로그로 정리합니다.

iOS7에서, NavigationController의 Top Bar가 있을 경우, TableView등의 ScrollView에서는 자동으로 내부 Content영역이 Top Bar밑으로 내려오게 됩니다.

TableView의 경우에는 아래로 내리면 첫번째 Row가 Top Bar 밑으로 표시 되고, 그 밑으로 들어가면 화면에서 가리게 됩니다.
그리고, 위로 올리면, Top Bar뒷면으로 Cell들이 올라가게 됩니다.

어떤경우에 문제가 될까요?
TableView의 경우에는 아주 좋은 기능으로, 첫번째 Row가 잘 표시가 됩니다만, ScrollView의 경우에는 조금 달라집니다.
Top bar밑으로 나왔다가 안 나왔다가 하면 문제가 됩니다.

이 기능을 컨트롤 할 수 있는 방법은
Storyboard의 ViewController에서 Adjust Scroll View Insets를 체크하거나,

automaticallyAdjustsScrollViewInsets를 NO 로 설정하여 기능을 뺄 수 있습니다.
이 기능을 빼면, 자동으로 contentInsets.top 이 설정되지 않으므로 가장 위까지 content영역으로 됩니다.

TableViewController에서 automaticallyAdjustsScrollViewInsets를 NO로 설정하게 되면, row 0, 1은 top bar의 뒷면에 위치하게 되어서, 아래로 내리지 않는 이상을 볼 수도 없고, 선택할 수도 없게 됩니다.

이 기능은 iOS7에서만 지원하는 것이므로, iOS6에서 기능 설정을 무시하게 하려면, 함수가 지원하는지 respondsToSelector를 통해서 확인하고 설정하면 되겠습니다.
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
    self.automaticallyAdjustsScrollViewInsets = NO;
}



[참고]
- iOS 7 UI Transition Guide : AppearanceCustomization