iPhone 앱을 Universal로 해 iPad 대응했을 때에 대응한 7개의 일

8773 단어 iOSiPad

1. Devices를 Universal로 설정





2. iPad용 아이콘 준비





3. iPad용 스크린샷 준비



필수 스크린샷 크기는 스크린샷 사양에 설명되어 있습니다.



4. 가로 화면 대응을 검토한다



iPad에서는 가로 화면 대응을 할 필요가 있습니다. 회피 방법도 있으므로, 대응을 검토해 대응합니다.
자세한 것은 iPad에서 Device Orientation을 Portrait 전용으로 만드는 방법에 기재했습니다.

5. actionSheet의 대응


UIAlertControlleractionSheet 를 사용하는 경우 iPad용 구현이 필요합니다.
제 경우에는 다음과 같은 구현을했습니다.
        let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

        alert.popoverPresentationController?.sourceView = view
        alert.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.width - 5, y: 90, width: 0, height: 0)
        alert.popoverPresentationController?.permittedArrowDirections = .up
BarButtonItem 를 사용하는 경우 sourceRect 대신 barButtonItem 를 설정합니다.
자세한 것은 UIAlertController를 iPad에서 사용할 때의 주의점 에 정리되어 있습니다.

6. UIActivityViewController 대응


UIActivityViewController 를 사용하는 경우에도 actionSheet 와 같은 대응이 필요합니다.
제 경우에는 다음과 같은 구현을했습니다.
        let activityVC = UIActivityViewController(activityItems: [], applicationActivities: nil)
        activityVC.popoverPresentationController?.sourceView = view
        activityVC.popoverPresentationController?.sourceRect = CGRect(x: view.bounds.width / 2, y: view.bounds.height / 2, width: 0, height: 0)

7. UICollectionView 대응


UICollectionViewCell 의 사이즈를 화면 사이즈로 결정하는 실장을 하고 있었으므로 대응이 필요했습니다.
ViewController viewWillTransition 메서드가 화면 방향 변경을 감지할 수 있으므로 이 메서드를 oberide 하여 필요한 작업을 수행합니다.
예를 들면 이런 느낌입니다.
    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        updateCollectionViewLayout(fullWidth: size.width)
        collectionView.reloadData()
    }

    private func updateCollectionViewLayout(fullWidth: CGFloat) {
        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            let space = layoutHelper.space
            flowLayout.minimumInteritemSpacing = space
            flowLayout.minimumLineSpacing = space
            flowLayout.itemSize = layoutHelper.getPhotoCellSize(fullWidth: fullWidth)
        }
    }

기타 참고로 한 페이지


  • iPhone 앱을 범용화하기 위해 최소한 필요한 것
  • iPad에서 UIActivityViewController를 호출하면 충돌하는 현상의 대응
  • 좋은 웹페이지 즐겨찾기