[iOS10] Today Extension (Widget)의 빠짐(iPad)

1669 단어 ios10iPad
iOS10의 Today Extension (Widget)을 개발하는 동안 빠진 곳을 씁니다.

환경



OS: iOS10
기기: iPad(iPad Pro 12.9인치 제외)

위젯 배치



iPad에서 화면을 Landscape로 설정하면 위젯을 왼쪽 또는 오른쪽 열에 배치할 수 있습니다.



화면을 Portrait로 하면 1열이 됩니다.
(iPad Pro 12.9인치 제외)



빠는거리



문제는 위젯을 오른쪽 열에 배치했을 때, 예를 들어 Landscape에서 Portrait로 화면을 회전하면 위젯의 화면 크기가 변경되지 않고 Landscape 용 위젯이 끝나면서 Portrait 용 위젯이 시작됩니다. .

언제든지 Landscape에서 보는 위젯과 Portrait에서 보는 위젯은 다른 인스턴스입니다.

주석
  • 위젯을 왼쪽 열에 배치하면 발생하지 않습니다.
  • iPad Pro 12.9인치에서는 위젯이 항상 2열이므로 발생하지 않습니다.
  • iPhone6Plus계의 화면 회전에서는 발생하지 않습니다.

  • 로그



    Landscape에서 Portrait로 만들 때


    Landscape 오른쪽 열
    Portrait


    viewWillDisappear


    viewDidLoad()

    widgetActiveDisplayModeDidChange(_:withMaximumSize:)

    widgetPerformUpdate(completionHandler:)

    viewDidDisappear


    viewWillAppear

    deinit


    viewDidAppear


    문제



    「화면의 회전에서는 위젯의 화면 사이즈가 바뀔 뿐」이라고 하는 전제로 코딩하면, 화면을 회전하면 초기치가 표시되는 등의 현상에 휩쓸립니다.

    대책



    viewWillDisappear에서 UserDefaults 등에 데이터를 저장하고 다른 인스턴스가 viewWillAppear에서 읽도록 하여 데이터를 동기화하도록 합니다.
    deinit으로 데이터를 저장하면 다른 인스턴스가 이미 시작되었으므로 데이터를 동기화할 수 없습니다.

    좋은 웹페이지 즐겨찾기