UIScrollView와 UINavigationBar가 어긋났을 때의 대응

현상



UINavigationBar가있는 ViewController에 ScrollView를 전체 화면으로 놓고,
UI 컴포넌트를 두었습니다.
그러나 StoryBoad의 표시 위치와 빌드했을 때의 iPhone의 화면이 아무래도 어긋난다.
그 해결 방법을 조사했습니다.

UI 구성 요소의 계층 구조는
  • View(rootView)
  • ScrollView
  • View(콘텐츠 뷰)
  • IB 컴포넌트 (실제로 배치하는 컴포넌트)





  • (20150719일 추가)

    AutoLayout의 설정은 Visual Format Language로 나타내면
  • H:|-(-16)-[ScrollView]-(-16)|
  • ScrollView의 수평 위치는 rootView의 좌우의 가장자리(좌우는 16포인트의 마진이 있으므로 -16을 지정)

  • V:|-[ScrollView]-|
  • ScrollView의 수직 위치는 rootView의 상하의 끝

  • |-[View(600)]-|
  • 컨텐츠 뷰는 ScrollView의 상하 좌우의 가장자리. 그리고 높이 가로 600 포인트

  • H:|-8-[Label]|
  • 라벨은 왼쪽 끝에서 8 포인트 떨어져 있습니다

  • V:|-153-[Label]|
  • 라벨은 위에서 153 포인트 떨어져 있습니다





  • Storyboad에서 내비게이션 바로 아래에 라벨 "IB와 표시 위치가 다르다"를 배치했습니다.

    앱을 실행할 때 표시





    실행했을 때의 레이아웃은 라벨이 네비게이션의 꽤 아래에 왔습니다.
    (네비게이션과 같은 거리 떨어져??)

    해결 방법



    ViewController의 AttributesInspector에서
    Layout > Adust Scroll View Insets
    을 끄면 IB에서의 표시와 동일합니다.



    Adust Scroll View Insets를 끄고 앱 실행 표시





    메커니즘



    Adjust Scroll View Insets와 Under Top Bars를 모두 확인한 경우
    contentInsets.top이 조정되었습니다.
    UIScroll은 내비게이션 바 아래에서 시작하는 것 같습니다.
    그래서 Adjust Scroll View Insets를 끄는 것이 좋습니다.

    참고



    역시 너희들의 iOS7 대응은 잘못되어 있다(해설편)
    ぃ tp // 이 m / y 지금 / ms / 254c7하면 b7864678246

    좋은 웹페이지 즐겨찾기