4

私は問題があります。私のアプリはタブ バー コントローラーで、最初のビュー コントローラーは分割ビュー コントローラーです。ドキュメントには、スプリット voew コントローラーがルートである必要があると記載されているため、これは Apple にとっては問題があるようです。おそらくそれが私の問題の原因です。

UISplitViewControllerDelegate からの willHideViewController が呼び出されないことがあり、そのために左上のボタンが作成されないことがあるという問題があります。このエラーを再現するには、これを数回試してください: -横向きモード。・スプリットView Controllerのタップとは別のタブを選択。-そのタブで iPad を縦向きに移動します。-Split View Controller タブに移動すると、willHideViewController が呼び出されないため、上部のボタンが表示されないことがあります。ただし、iPad を横向きに回転させてから縦向きにすると、修正されます。

この問題を回避するために手動でいくつかのローテーションを強制しようとしましたが、うまくいきませんでした。github などから分割ビュー コントローラーのクローン クラスを試してみる必要があります。何が起こっているのか、または回避策はありますか?

ここでは、適切に動作する 2 つの例を示します。

ここに画像の説明を入力 ここに画像の説明を入力 どうもありがとうございました。

4

2 に答える 2

0

これは、私が「十分に」正当であると考える方法で行うことはできないと結論付けました。イライラするほど接近する可能性はありますが、各タブの下にある分割ビュー コントローラーに willShow..., willHide を配布するという問題は残ります。

最もうまくいくと思われる解決策は、

https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m

このコードは間違いなく賢いですが、私にとっては少し「脇道」に過ぎません。デリゲート メソッドを呼び出すだけでは不十分だと思います (しかしわかりません)。確かに UISplitViewController 自体は、デリゲート メソッドを呼び出すだけでなく、内部状態を変更する必要がありますか? このメソッドは、方向が変更されたときにデリゲート メソッドを「ただ」呼び出します。

そこで...私は、iOS 5 で導入された新しい方法を使用するという、より正当な解決策を決定しました。

- (BOOL) splitViewController:(UISplitViewController *)svc
             shouldHideViewController:(UIViewController *)vc
             inOrientation:(UIInterfaceOrientation)orientation
{
     return NO;
}

したがって、マスター メニューが非表示になることはないため、ポップオーバーの管理の問題は発生しません。

もちろん、トップ レベルではない UISplitViewControllers がまだ含まれているため、これはまだ完全に「合法」ではありません (UITabViewController はトップ レベルにあり、分割ビューは各タブにあります)。

どのソリューションを選択しても、頑張ってください。

Apple がこのソリューションを使用するアプリを承認することを確認したら、この返信を更新します。

于 2012-02-28T10:20:31.597 に答える
0

splitViewControllers デリゲートをどこに設定しますか? おそらく、タブをロードするときにデリゲートを設定できます。1回転した時だけ設定してる感じ?

それ以外の場合は、この例を参照してください

ここでは、TableViewController を splitviewcontroller のデリゲートにしています。おそらく、TabBarController でも同じことができますか?

于 2012-01-19T09:28:45.950 に答える