2017-11-08 4 views
2

SKStoreProductViewController를 표시하고 일부 제약 조건 충돌이 발생합니다. 이전에 - 활성화 된 제약 조건이 다시 활성화되었음을 확인할 수 있습니다. 나는 이것이 왜 일어나야하는지 알 수 없다.SKStoreProductViewController를 표시하면 비활성 제약 조건이 다시 활성화됩니다.

읽고 편의를 위해 *** ———><———— ***으로 표시된 아래를 참조하십시오.

내가 생각할 수있는 유일한 가능성은 다음과 같습니다. 내 앱이 가로 전용이므로 SKStoreProductViewController.shouldAutorotate의 하위 클래스를 false로 설정해야합니다.

class MyProductViewController : SKStoreProductViewController { 
    override var shouldAutorotate: Bool { 
     return false 
    } 
} 

func openStoreProduct(identifier: String) { 
    let storeViewController = MyProductViewController() 
    storeViewController.delegate = self 

    let parameters = [ SKStoreProductParameterITunesItemIdentifier : identifier] 
    storeViewController.loadProduct(withParameters: parameters) { [weak self] (loaded, error) in 
     if loaded { 
      print("In: \(self?.myConstraint.isActive)") 
      // *** ———> Prints "In: false". <——— *** 

      self?.present(storeViewController, animated: true) { 
     } 
    } 
} 

func productViewControllerDidFinish(_ viewController: SKStoreProductViewController) { 
    print("Out: \(self.myConstraint.isActive)") 
    // *** ———> prints "Out: true" <——— *** 

    viewController.dismiss(animated: true, completion: nil) 
} 
+0

StoreViewController가 상당히 많은 레이아웃 속성을 사용하여 엉망이되거나 돌아 오는 것으로 나타났습니다. 이를 보완해야합니다 (예 : 해킹). 위의 경우 IB에서 제약 조건을 제거하면 문제가 해결됩니다. 귀하의 질문에 대한 답변이 활성화되면 완전한 해결책을 제시합니다. –

답변

1

문제는 StoreProduct 제어기 제시에서 반환 할 때, 일부 레이아웃 값은 예를 들면, 값이 설정 프로그램 잃고 그 IB 값으로 변경 한 것입니다 isHidden, isActive

이 경우 특정 상황에서 제약 조건을 교체했지만 변경 사항이 필요하지 않은 경우 원래 IB 상태를 그대로 두었습니다. Store에서 돌아 왔을 때 원래 제약 조건은 - 활성화되었지만 그 대체물은 여전히 활성이었습니다. 물론 그들은 충돌했다.

해결책은 IB의 제약 조건의 "Installed"체크 박스의 선택을 취소하고 코드의 제약 조건을 모두 원하는 경우로 바꾸고 활성화하는 것입니다. 당신이 그것을 바꾸고 싶지 않을 때 손대지 않은 상태로 두는 것보다.

엉망이 될 수있는 다른 UI의 경우 productViewControllerDidFinish()에 플래그를 설정하고 레이아웃 코드에서이를 테스트 할 수 있습니다.

이 동작은 일 수 있습니다.은 질문에서 언급 한 랜드 스케이프 문제와 관련이 있습니다. iPhone에서 StoreProductViewController는 세로 모드에서 만 제공합니다. 앱이 가로 방향이고 현재 ViewController가 StoreProduct를 표시하면 OS는 분명히 앱을 세로로 표시하여 스토어를 표시합니다. 이것이 일시적으로 일어나는 것을 볼 수 있습니다. Store는 어느 방향 으로든 팝업으로 표시되기 때문에 iPad에서는 문제가되지 않습니다.

+0

당신은 저보다 앞서 있습니다. - 다른 한편으로는, 필자는 애플이 자체적으로 만든 뷰 컨트롤러에 제약 조건이 너무 많아서 더 이상주의를 기울이지 않는다. – matt

관련 문제