問題タブ [adaptive-ui]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOS8でNSLayoutConstarintの「mutiplier」プロパティの値を変更する方法
アプリの設計にアダプティブ レイアウト機能を使用しています。私IBOutlet
は「アスペクト比」の制約を取ります。この Aspect Ratio Value の値を現在の値の 2 倍に変更したいと考えています。問題は、" constraint
" プロパティがコードから簡単に設定できることですが、" multiplier
" プロパティは読み取り専用のプロパティです。アスペクト比の変更には、「マルチピア」値の変更が必要です。どうすればこれを行うことができますか?.
コード内
その結果
ios - サイズ クラスを使用してフォント サイズを変更する
私はアダプティブレイアウトを作成するために使用size classes
していますが、その中に があります。これらのラベルの iPad のフォント サイズを変更したいのですが、属性付きのテキストは では使用できないようです。問題は、属性付き文字列のフォント サイズを変更する方法です。 storyboard
attributed UILabel
size classes
UILabel
IB
UILabel
ios - ビュー コントローラーの表示方法を決定する
UIModalPresentationStyle
アダプティブ スタイルに設定されたビュー コントローラーをモーダルに表示していますUIModalPresentationPopover
。このスタイルは、横にコンパクトな環境 (iPhone の縦長) で画面全体に表示されます。横レギュラー、縦コンパクト環境(iPhone 6 Plus横)の場合はフォームシートに表示されます。そして通常の通常環境(iPad)ではポップオーバーとして表示されます。これは望ましい動作です。
そのコントローラーが実際にどのように表示されるか (フォーム シート、全画面表示、またはポップオーバー) をプログラムで決定する必要があります。表示されているView Controller内からそれを判断するにはどうすればよいですか?
その理由は、ポップオーバー内にない場合にのみ、[完了] ボタンを追加する必要があるためです。(または、ポップオーバーにある場合は非表示にします。)
ビュー コントローラの作成:
viewController の内部:
ios - IOS8 SplitVC + TabBarController + NavigationController
私はサイズ クラスを使用してユニバーサル アプリを実行しており、マスター/プライマリ ビューで TabBarController を使用して SplitView を使用しようとしています。splitView を追加する前はすべて正常に機能していましたが、現在はアプリがクラッシュします (理由はビューの階層によって異なります)。
だから私はApple SplitViewテンプレートから始めて同じストーリーボードを試し、マスター/プライマリビューにTabBarControllerを追加しました...同じ問題。
階層 - TabBarController に埋め込まれたマスター NavigationController: SplitVC (マスター) > TabBarController > NavigationController > TableView SplitVC (詳細) > NavigationController > View
このコードを AppDelegate.m に追加しました (ここで示されているように、 stackoverflow question ios8-tabbarcontroller ... DetailView がモーダルに表示されるのを防ぎます):
正常に動作します... iPhone6 Plusでシミュレートしない限り、その場合、縦向きで開始して行を選択した後、横向きに回転すると、詳細ビューがプライマリビューとセカンダリビューとして表示されます。
このコードを iPhone で縦向きに追加しないと、詳細ビューはモーダルで表示され、もちろんナビゲーション ボタンは表示されません。
編集
さまざまな試みの後、いくつかの外部の助けを借りて、解決策に向けていくつかのステップを踏み出しました。
短いバージョン(これを行う必要がある理由については、長いバージョンを参照してください)
この問題の正しい解決策は、TabBarController をサブクラス化し、いくつかのメソッドをサポートすることです。
今、viewControllers スタックに問題があります: iPhone6Plus (水平のレギュラーとコンパクトの両方をサポートする唯一のもの) で、横向きのときに行を選択せずにタブを変更すると、アプリがクラッシュします (したがって、detailView は前のタブのもののままです) )、縦向きに回転します。
ビュー スタックを適切に管理する分離メソッドと折りたたみメソッドを実装する必要があることはわかっていますが、その方法がわかりません。誰かがこれについて助けることができますか?
長いバージョン(SplitViewController の動作)
通常、分割ビュー コントローラーとナビゲーション コントローラーは連携して動作し、分割ビュー コントローラーに含まれるビュー コントローラーから -showDetailViewController:sender: を呼び出すと、新しい詳細ビュー コントローラーがナビゲーション スタックにプッシュされます (水平にコンパクトな環境)。これを行うために、UISplitViewController は -showDetailViewController:sender: をオーバーライドし、水平方向にコンパクトな場合は、そのマスター ビュー コントローラーの -showViewController:sender: メソッドを呼び出します。UINavigationController は -showViewController:sender: をオーバーライドし、受信ビュー コントローラーをナビゲーション スタックにプッシュします。
ただし、UITabBarController は -showViewController:sender: をオーバーライドしないため、着信ビュー コントローラーをモーダルに表示するデフォルトの実装を継承します。これを回避するには、UITabBarController をサブクラス化し、-showViewController:sender: をオーバーライドして、selectedViewController がナビゲーション コントローラーの場合、タブ バー コントローラーの selectedViewController に転送する必要があります。
さらに、分割ビュー コントローラーがコンパクトから水平サイズのクラスから通常の水平サイズのクラスに移行する場合、分割ビュー コントローラーは最初に -splitViewController:separateSecondaryViewControllerFromPrimaryViewController: メッセージをそのデリゲートに送信します。デリゲートは、このメソッドを実装して分離自体を処理し、詳細ビュー コントローラーを返すことができます。デリゲートがこのメソッドを実装しない場合、または実装が nil を返す場合、分割ビュー コントローラーは -separateSecondaryViewControllerForSplitViewController: メッセージをプライマリ ビュー コントローラーに送信します。プライマリ ビュー コントローラーは、分離を処理するためにこのメソッドを実装する必要があります。UINavigationController は -separateSecondaryViewControllerForSplitViewController: を実装します。これ' s の実装は、トップ ビュー コントローラーをナビゲーション スタックからポップして返します。タブ バー コントローラーをプライマリ ビュー コントローラーとして使用しているため、 -separateSecondaryViewControllerForSplitViewController: を実装し、自分で分離を処理する必要があります。
また、独自の折りたたみロジックを実装する必要があります。分割ビュー コントローラーが通常の水平サイズのクラスからコンパクトな水平サイズのクラスに移行するとき、分割ビュー コントローラーは最初に -splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: メッセージをそのデリゲートに送信します。デリゲートは、このメソッドを実装して、折りたたみ自体を処理できます。デリゲートがこのメソッドを実装していない場合、分割ビュー コントローラーは -collapseSecondaryViewController:forSplitViewController: メッセージをプライマリ ビュー コントローラーに送信します。プライマリ ビュー コントローラーは、分離を処理するためにこのメソッドを実装する必要があります。
UINavigationController は -collapseSecondaryViewController:forSplitViewController: を実装しています。この実装は、セカンダリ ビュー コントローラーをナビゲーション スタックにプッシュします。タブ バー コントローラーをプライマリ ビュー コントローラーとして使用しているため、-collapseSecondaryViewController:forSplitViewController: を実装し、折りたたみを自分で処理する必要があります。