web-dev-qa-db-ja.com

iOS8共有拡張機能カスタムビューコントローラーのサイズ

IOSアプリの共有拡張機能を構築していますが、デフォルトのSLComposeServiceViewControllerを使用できないため、(ストーリーボードで)基本的なUIViewControllerを作成し、ナビゲーションコントローラーに埋め込みました。私はそれを提示したり、却下したりしますが、常にフルスクリーンです。ダイアログのように見せたいです。 ViewControllerでself.preferredContentSizeを使用し、InterfaceBuilderのナビゲーションコントローラーでUse Preferred Explicit Sizeを使用しようとしましたが、機能しません。

29
imas145

これはストーリーボードを使用して簡単かつ直接行うことができますが、すぐにはわかりません。複数のViewControllerは必要ありません。

  1. UIViewControllerから継承する独自のViewControllerクラスを作成します。
  2. MainInterface.storyboardで、ViewControllerのクラスを新しいクラスに変更します
  3. ストーリーボードでは、UIを簡単に描くことができますが、ここに秘訣があります。ストーリーボードビューが画面全体に表示され、デフォルトでは、ビューはすでにクリアな背景で作成されていることを理解する必要があります。メインビュー内にビューを作成するだけです。自動レイアウト制約を設定して、このビューのサイズと位置を設定できます(たとえば、水平方向と垂直方向の中央に配置します)。サイズクラスを使用して、この内部ビューをコンパクトなレイアウトで画面全体に表示することもできます。コントロールをドラッグして、通常の方法で内部ビューからビューコントローラーにコントロールを接続します

Sample Storyboard

  1. カスタムビューコントローラーでは、self.extensionContextを参照して、共有アクションを読み取って完了することができます。テンプレートShareViewExtensionのコードを参照してください
17
Dale

わかりました、私はこれを理解しようと長い時間を費やしました。何らかの理由で、アクション拡張機能のようにビューサイズを設定することはできません。常にフルスクリーンになります(iPadでも)。したがって、これを回避する方法は、複数のViewControllerを作成することです。フルスクリーンのViewControllerが存在することにユーザーが気付かないように、最初のView Controllerを非表示にします(もちろん、共有拡張機能では、最初の非表示のView Controllerは実際には完全に非表示になるため、ユーザーはそれが提示されたことさえ知りません) 。次に、非表示のViewControllerを使用して実際のViewControllerを提示します。このようにして、好きなように提示したり、サイズなどを設定したりできます。

私の場合、実際に非表示のビューコントローラーにUIEffectViewを持たせたので、背景に素敵なぼかしアニメーションを作成して、実際のビューコントローラーをその上に表示できます。

これが写真です: enter image description here

12
Epic Byte